Compare commits
352 Commits
Author | SHA1 | Date |
---|---|---|
Michael Stefaniuc | 270803bad7 | |
Matteo Bruni | ce5477ef02 | |
Nikolay Sivov | 9002eae344 | |
Alex Henrie | c7ae2d5d22 | |
Piotr Caban | 9c0dfffe3f | |
Alexandre Julliard | dadacb9fb8 | |
Louis Lenders | 1a508ae2bf | |
Ismael Luceno | 4517c49ade | |
Louis Lenders | 188c86e5f3 | |
Gabriel Ivăncescu | 2aa94c0beb | |
Nikolay Sivov | 461abf501a | |
Olivier F. R. Dierick | 134789d517 | |
Huw Davies | 149284628d | |
Nikolay Sivov | 3ce2336788 | |
Jacek Konieczny | c03499e8ec | |
Jacek Caban | 2b48e780fe | |
Zebediah Figura | bd444692a9 | |
Bernhard Übelacker | 749d5efa7e | |
Akihiro Sagawa | 4642de1d6c | |
Eric Pouech | 3bff9ccfa4 | |
Connor McAdams | 19de448df6 | |
Bernhard Übelacker | 6766fb687f | |
Alexandre Julliard | 2e51da6f16 | |
Rémi Bernon | 6d98de6889 | |
Hugh McMaster | 6e7f753c15 | |
Christian Costa | 19acdd0c35 | |
Louis Lenders | ce23d7aa44 | |
Alexandre Julliard | 795035c0ec | |
Gerald Pfeifer | 71dc3ca16e | |
Zhiyi Zhang | d0b9ab2b91 | |
Nick Fox | c133264b69 | |
Nick Fox | 9288f9e22a | |
Piotr Caban | c2efc7ed8a | |
Derek Lesho | 6dfcf590e1 | |
Alex Henrie | 05bcb3cde0 | |
Piotr Caban | 4c16e0f20b | |
Thomas Faber | d1833f8ea6 | |
Doug Lyons | 5be7fa7879 | |
Piotr Caban | b45ad23033 | |
Connor McAdams | 4ed070302f | |
Louis Lenders | ef27e2b503 | |
Piotr Caban | fb168121b2 | |
Loïc Rebmeister | 0b26e88937 | |
Louis Lenders | b48ce9212e | |
Bernhard Kölbl | 4bde9d09a3 | |
Eric Pouech | b00bd9b9ee | |
Gabriel Ivăncescu | ad7c5e9ced | |
Gabriel Ivăncescu | 9edeb764da | |
Robert Wilhelm | d4024e428b | |
Michael Stefaniuc | f560fad07d | |
Alexandre Julliard | 8d00191097 | |
Jefferson Carpenter | 98a3f0376b | |
Hans Leidekker | b296253f79 | |
Hans Leidekker | b5eebf644a | |
Piotr Caban | 56b6abd5ea | |
Ted Lyngmo | b690f67231 | |
Piotr Caban | efdd2b8a57 | |
Alistair Leslie-Hughes | b56d5b9a47 | |
Alistair Leslie-Hughes | a6af1e31dd | |
Fabian Maurer | 3bf9bae9bf | |
Robert Wilhelm | e08b8f0f86 | |
Hans Leidekker | fe6c5b9305 | |
Hans Leidekker | 1d57f812c0 | |
Hans Leidekker | 73e998ab02 | |
Hans Leidekker | ddd57141e1 | |
Hans Leidekker | 90661a5d93 | |
Hans Leidekker | 5e855f33f5 | |
Hans Leidekker | af1b70b7bb | |
Bernhard Übelacker | d2392af664 | |
Jan Sikorski | cb8fde193b | |
Francois Gouget | 7a9898344d | |
Giovanni Mascellani | 8506b2ae18 | |
Paul Gofman | f9f4e8f692 | |
Zebediah Figura | 83923e43d5 | |
Alexandre Julliard | a59337fb7e | |
Jacek Caban | d1d979bf91 | |
Zebediah Figura | 2a51b72ec3 | |
Gijs Vermeulen | 08a3472c54 | |
Andrew Eikum | dd412ae81c | |
Gerald Pfeifer | b363adda05 | |
Dmitry Timoshkov | 97bbaf5285 | |
Andrew Boyarshin | 3c83603c8c | |
Paul Gofman | 7ad7ceb1a2 | |
Fabian Maurer | d2437cbdce | |
Eric Pouech | 26c739a4fe | |
Zhiyi Zhang | f0143c1bc9 | |
Alistair Leslie-Hughes | db98059c71 | |
Fabian Maurer | f776c46642 | |
Zhiyi Zhang | 493a7f4daa | |
Zhiyi Zhang | 7398ed2977 | |
Nikolay Sivov | f1589ee006 | |
Alistair Leslie-Hughes | a941df5c12 | |
Alistair Leslie-Hughes | 675908b29c | |
Akihiro Sagawa | 904ad1e120 | |
Akihiro Sagawa | b823fa1a3a | |
Austin English | 7409b10902 | |
Francois Gouget | bc3524e8e5 | |
Francois Gouget | e3aa6390dc | |
Francois Gouget | 617015e11a | |
Francois Gouget | f82b97c778 | |
Francois Gouget | 93971ce383 | |
Francois Gouget | c8dc029d41 | |
Francois Gouget | 014c114a28 | |
Francois Gouget | 806b738a11 | |
Francois Gouget | 3b17256786 | |
Damjan Jovanovic | 2240ac5e27 | |
Damjan Jovanovic | 9ece53ed3a | |
Alex Henrie | 60284543da | |
Oleg Dubinskiy | 10646cd4e0 | |
Alex Henrie | dfe1fa9abc | |
Zhiyi Zhang | 72a7c1991c | |
Akihiro Sagawa | c55a6b6407 | |
Jacek Caban | 8cc412b90c | |
Francois Gouget | bb652772af | |
Francois Gouget | bf217a1a47 | |
Francois Gouget | e4ea517b6c | |
Francois Gouget | dffceba799 | |
Francois Gouget | 76d30e2d51 | |
Piotr Caban | 2253901ccf | |
Jactry Zeng | 89926751ff | |
Zhiyi Zhang | 46390286f0 | |
Zhiyi Zhang | 6b501df752 | |
Henri Verbeet | b96d75db4d | |
Henri Verbeet | f8d613fdc5 | |
Francois Gouget | 4b3ca9abee | |
Akihiro Sagawa | d3ffdb1740 | |
Akihiro Sagawa | a917d758b3 | |
Akihiro Sagawa | b301e0285e | |
Brendan McGrath | 9de7231fea | |
Andrey Gusev | 7a6b76f28a | |
Roman Pišl | 3ba8d6ea05 | |
Damjan Jovanovic | 66fe6841b8 | |
Zhiyi Zhang | c7436090e4 | |
Zhiyi Zhang | e049b275c5 | |
Florian Eder | bc6346ba85 | |
Nikolay Sivov | f2a45ae5c4 | |
Vijay Kiran Kamuju | 4eea9e383a | |
Gijs Vermeulen | 718699df40 | |
Damjan Jovanovic | 4fddab4813 | |
Hiroki Awata | 1ecb100289 | |
Kalen Alwardt | 3e134c2b5c | |
Rémi Bernon | f9bca7ed42 | |
Rémi Bernon | e83cd0e70f | |
Rémi Bernon | 239bb6cc55 | |
Rémi Bernon | 9ef3ca8b2d | |
Hans Leidekker | 7f1d6a8ee2 | |
Michael Stefaniuc | 3c9afe8f87 | |
Alexandre Julliard | 4f158c1ca6 | |
Alexandre Julliard | 1c9679a35f | |
Gijs Vermeulen | 4a0a4d150d | |
Gijs Vermeulen | e2e053ea57 | |
Alexandre Julliard | 4f9701317b | |
Hans Leidekker | 2ed9701ab9 | |
Zebediah Figura | f61a3b7d15 | |
Francois Gouget | cd5311958c | |
Anton Baskanov | 40b962f9ef | |
Anton Baskanov | 7347cbd07a | |
Haidong Yu | bd11172b7a | |
Haidong Yu | ef54f3c227 | |
Rémi Bernon | 531247b84e | |
Damjan Jovanovic | e35da6ed01 | |
Torge Matthies | 96a1855bb9 | |
Piotr Caban | 3b224895b0 | |
Brendan Shanks | d7e26f2f7b | |
Matteo Bruni | 9af691e74a | |
Austin English | 44da7b267a | |
Haoyang Chen | 328d834ad9 | |
Owen Rudge | fb53228568 | |
Paul Gofman | 5cf41e251d | |
Zhiyi Zhang | d7f35aacea | |
Dmitry Timoshkov | 8c985b2b66 | |
Arkadiusz Hiler | f6144283a6 | |
Andrew Eikum | fbe42005a5 | |
Jacek Caban | f2dad112ac | |
Nguyễn Chính Hữu | 08d4d30a12 | |
Brendan Shanks | 3ff3988763 | |
Alistair Leslie-Hughes | 2f06215a8e | |
Nikolay Sivov | c8d12b4e05 | |
Piotr Caban | cdab0e40b9 | |
Esme Povirk | a0b7fb69e7 | |
Haoyang Chen | bf92d6bedf | |
Gijs Vermeulen | ee79875f34 | |
Zebediah Figura | 57ed063ec0 | |
Zebediah Figura | ea49fd72f0 | |
Zebediah Figura | f78df1dd43 | |
Francois Gouget | 598a21be9c | |
Francois Gouget | 0aabd08c53 | |
Louis Lenders | 360ce18577 | |
Louis Lenders | 1b64d29849 | |
Sebastian Lackner | 717e8d5366 | |
Qian Hong | 1abbaaa221 | |
Piotr Caban | 1d23985d64 | |
Piotr Caban | 737adb2684 | |
Piotr Caban | 53ee588abb | |
Nikolay Sivov | 499448fb21 | |
Paul Gofman | d312b7ac50 | |
Damjan Jovanovic | 94254f4a14 | |
Damjan Jovanovic | 26c1f7c83b | |
Zebediah Figura | 5703c14110 | |
Damjan Jovanovic | df085a31ff | |
Damjan Jovanovic | 3b90fc2314 | |
Damjan Jovanovic | 46df61a087 | |
Gijs Vermeulen | ebaafad23e | |
Gijs Vermeulen | 43120ef411 | |
Michele Dionisio | 5aeb6c71d0 | |
David Torok | 758ecd13ab | |
Dmitry Timoshkov | d54b02e281 | |
Dmitry Timoshkov | fa4714e604 | |
Gijs Vermeulen | fe998fb2d3 | |
Gijs Vermeulen | 74d7bd0fdf | |
Anton Baskanov | a0711d16fa | |
Anton Baskanov | f16cda7e63 | |
Alexandre Julliard | 910d7e52e5 | |
Andrey Turkin | 1edb71ad07 | |
Alexandre Julliard | 6622aed36e | |
Vijay Kiran Kamuju | f636870dd8 | |
Vijay Kiran Kamuju | b973686abc | |
Lauri Kenttä | ae66cb71b4 | |
Piotr Caban | 7dfaf25939 | |
Louis Lenders | 23ac462cff | |
Jacek Caban | adc1b84adb | |
Akihiro Sagawa | 08397d2346 | |
Akihiro Sagawa | bc76df8934 | |
Austin English | bdf3307a15 | |
Vijay Kiran Kamuju | 4705790ee3 | |
Rémi Bernon | 4dc5606c35 | |
Jacek Caban | 158c49ca48 | |
Alexandre Julliard | 5d5d7f41f5 | |
Arkadiusz Hiler | 8180241f02 | |
Arkadiusz Hiler | 95154afde7 | |
Piotr Caban | 1a38fd0a54 | |
Jan Sikorski | cfec1ccd0d | |
David White | d7827c6745 | |
Dmitry Kislyuk | 506a20a1da | |
Hans Leidekker | 60fcda90f4 | |
Louis Lenders | 81f705ee5b | |
Roman Pišl | ef574b5e0c | |
Roman Pišl | 6260a41277 | |
Gijs Vermeulen | c130d3ad74 | |
John Zourlios | 678d118c42 | |
Gijs Vermeulen | 1d3156843b | |
Hans Leidekker | 0b33385f11 | |
Matteo Bruni | b9eb1a9327 | |
Louis Lenders | c3a9607a3b | |
Gijs Vermeulen | 5920a034b8 | |
Gijs Vermeulen | d2d42b9cc5 | |
Rémi Bernon | fa78f4a2da | |
Alexandre Julliard | 1552a865a3 | |
Michael Stefaniuc | 46e876377f | |
Martin Storsjo | be1c8a56a3 | |
Brendan Shanks | 5faad354d8 | |
Brendan Shanks | cb9b17fa85 | |
Brendan Shanks | aa83195f1a | |
Jan Sikorski | 52f5e431ed | |
Michael Stefaniuc | 8d5c8f775e | |
Zhiyi Zhang | f8784c6eb0 | |
Alexandre Julliard | c62e10c0e6 | |
Zhiyi Zhang | 91fff979c6 | |
Matteo Bruni | 6cc4bd4c28 | |
Floris Renaud | af9312c574 | |
Floris Renaud | 9bc7bbfe6b | |
Byeongsik Jeon | 5cbb615f22 | |
Floris Renaud | f39c602aa9 | |
Floris Renaud | 114a580b2e | |
Alexandre Julliard | 6cc71f92a3 | |
Sanghoon Park | dbd00086d5 | |
Floris Renaud | 71902db007 | |
Floris Renaud | 27fc09f67c | |
Brendan Shanks | f1a7cae5cb | |
Brendan Shanks | 497025d144 | |
Alexandre Julliard | ea2a235727 | |
Rémi Bernon | 7515889470 | |
Chao Long | 8d2e4ee83a | |
Rémi Bernon | 196f033dec | |
Andrew Sheldon | bd7041e39f | |
Zebediah Figura | 4f24daba64 | |
Nikolay Sivov | 9433c600f9 | |
Giovanni Mascellani | 4b774ec357 | |
Damjan Jovanovic | 087637e861 | |
Martin Storsjo | 0d89678307 | |
Paul Gofman | 3fab693d00 | |
Andrey Gusev | 1256e6226f | |
Dmitry Kislyuk | d94b4a494b | |
Gijs Vermeulen | c4cf95c6f9 | |
Dmitry Timoshkov | b66571e730 | |
Dmitry Timoshkov | 015f3167d8 | |
Bernhard Kölbl | 3224e39044 | |
Roman Pišl | 780b202907 | |
Roman Pišl | 907c5a2135 | |
Henri Verbeet | d0a38a32c7 | |
Matteo Bruni | 43e4f4b81e | |
Bernhard Kölbl | 597a3b414e | |
Alistair Leslie-Hughes | 3d74e4b563 | |
Alexandre Julliard | aff5e8fb75 | |
Jacek Caban | 3591388c75 | |
Roman Pišl | 1f09409052 | |
Vijay Kiran Kamuju | b403116243 | |
Jacek Caban | a4ac7faab9 | |
Alistair Leslie-Hughes | f4d30930a6 | |
Henri Verbeet | e6fab0bcba | |
Zhiyi Zhang | 1fdf148c58 | |
Akihiro Sagawa | 0dc595d4e1 | |
Michael Müller | dc85e95017 | |
Gijs Vermeulen | c3674b30f2 | |
Bernhard Reiter | f40379a9d1 | |
Zebediah Figura | fd59214adf | |
Zebediah Figura | a0452ee0bc | |
Hans Leidekker | f7c5cb04ba | |
Roman Pišl | 88a189f964 | |
Roman Pišl | 9dff1027d5 | |
Austin English | d81c2f2fa7 | |
Hans Leidekker | 18ab8254e9 | |
Henri Verbeet | dff027f211 | |
Henri Verbeet | c760f6b9de | |
Henri Verbeet | 1eead2aaca | |
Zebediah Figura | 02850d83bf | |
Zebediah Figura | 2e1ba07a11 | |
Piotr Caban | ec8c5545c3 | |
Piotr Caban | b1b8412f96 | |
Piotr Caban | 66e06267c0 | |
Piotr Caban | dcecdf6a46 | |
Alexandre Julliard | 600f8462ac | |
Christian Costa | e4976c0c98 | |
Nikolay Sivov | 00fb915af4 | |
Nikolay Sivov | 70a22fcb6e | |
Jacek Caban | e34899aea3 | |
Jan Sikorski | 6f3608d81a | |
Nikolay Sivov | 1b44efb59e | |
Zebediah Figura | 82b079cae4 | |
Akihiro Sagawa | e6819b0f43 | |
Akihiro Sagawa | c84fb8ad77 | |
Vijay Kiran Kamuju | dd026b0775 | |
Nikolay Sivov | 783e043e78 | |
Haoyang Chen | 8f6c45192d | |
Zebediah Figura | ae93bdd8fa | |
Henri Verbeet | dbfed2e2f6 | |
Nikolay Sivov | da2955cdb7 | |
Henri Verbeet | 198c0579be | |
Henri Verbeet | 53bbcc789e | |
Henri Verbeet | 129baec9ba | |
Henri Verbeet | 84d4d9195d | |
Hans Leidekker | 74d58e6e27 | |
Hans Leidekker | feed1f0efb | |
Hans Leidekker | 11b0d87c17 | |
Hans Leidekker | a06928cfdd | |
Nikolay Sivov | d104f03785 | |
Henri Verbeet | c13940de05 | |
Dmitry Timoshkov | 5bb151ebab | |
Dmitry Timoshkov | 35fb240695 | |
Hans Leidekker | dd59c1a45b | |
Henri Verbeet | 15f4d9c60e | |
Alistair Leslie-Hughes | 50fdd5e2b5 |
614
ANNOUNCE
614
ANNOUNCE
|
@ -1,25 +1,12 @@
|
|||
The Wine team is proud to announce that the stable release Wine 6.0
|
||||
is now available.
|
||||
The Wine maintenance release 6.0.4 is now available.
|
||||
|
||||
This release represents a year of development effort and over 8,300
|
||||
individual changes. It contains a large number of improvements that
|
||||
are listed in the release notes below. The areas of major changes are:
|
||||
|
||||
- Core modules in PE format.
|
||||
- Vulkan backend for WineD3D.
|
||||
- DirectShow and Media Foundation support.
|
||||
- Text console redesign.
|
||||
|
||||
This release is dedicated to the memory of Ken Thomases, who passed
|
||||
away just before Christmas at the age of 51. Ken was an incredibly
|
||||
brilliant developer, and the mastermind behind the macOS support in
|
||||
Wine. We all miss his skills, his patience, and his dark sense of
|
||||
humor.
|
||||
What's new in this release:
|
||||
- Various bug fixes
|
||||
|
||||
The source is available from the following locations:
|
||||
|
||||
https://dl.winehq.org/wine/source/6.0/wine-6.0.tar.xz
|
||||
http://mirrors.ibiblio.org/wine/source/6.0/wine-6.0.tar.xz
|
||||
https://dl.winehq.org/wine/source/6.0/wine-6.0.4.tar.xz
|
||||
http://mirrors.ibiblio.org/wine/source/6.0/wine-6.0.4.tar.xz
|
||||
|
||||
Binary packages for various distributions will be available from:
|
||||
|
||||
|
@ -35,454 +22,161 @@ AUTHORS in the distribution for the complete list.
|
|||
|
||||
----------------------------------------------------------------
|
||||
|
||||
What's new in Wine 6.0
|
||||
======================
|
||||
|
||||
|
||||
*** PE modules
|
||||
|
||||
- The core DLLs, including NTDLL, KERNEL32, GDI32, USER32, etc. are
|
||||
built in PE format. This should help a number of copy protection
|
||||
schemes that check that the DLL files on disk match the in-memory
|
||||
contents.
|
||||
|
||||
- There is a new mechanism to associate a Unix library with a PE
|
||||
module, to make it possible to call Unix libraries from PE for the
|
||||
functions that can't be handled with Win32 APIs.
|
||||
These libraries are found by replacing the PE module file extension
|
||||
with .so, for instance ntdll.dll -> ntdll.so. They have to be
|
||||
located next to the PE file on disk.
|
||||
Bugs fixed in 6.0.4 (total 42):
|
||||
|
||||
12732 Nota Bene crashes on install
|
||||
26350 Dungeons demo (OGRE) fails to load its plugins (LoadLibraryEx with LOAD_WITH_ALTERED_SEARCH_PATH and relative path)
|
||||
32183 Cannot open console device read only, then read from it to get input
|
||||
39699 EDT for Windows installer crashes inside wine`s hhctrl.ocx
|
||||
41098 Descent 3 (GOG version) has problem when running with OpenGL renderer (Nvidia proprietary drivers)
|
||||
42030 winedbg: Internal crash at 0x9f58fd40
|
||||
44202 undname.c fails to parse symbols with rvalue-reference semantics '&&'
|
||||
47287 Accessible Event Watcher Tool 'accevent.exe' from Windows 10 SDK (10.0.17763.x) crashes on unimplemented function oleacc.dll.AccessibleObjectFromEvent
|
||||
48631 Multiple games display text as squares (Death to Spies: Moment of Truth, Shadow Warrior, Resident Evil 4 HD)
|
||||
48950 NVDA needs oleacc.AccessibleObjectFromPoint implementation for mouse tracking
|
||||
50370 Gothic 1 doesn't start correctly when screen resolution of the game matches display resolution
|
||||
50526 ConEmu wineconsole Ctrl+m has different behavior
|
||||
50714 YooSee CMS client 10.0.0.53 crashes after login since Wine 5.12 (ntdll built as PE)
|
||||
51163 WinOffice Pro 5.3 stops after splashscreen, needs WMI class SoftwareLicensingProduct
|
||||
51195 Lara Croft and the Temple of Osiris doesn't launch
|
||||
51220 version:info - In Wine the GetFileVersionInfoEx() checks fail in non-English locales
|
||||
51396 cl.exe 64bit fails with internal compiler error, needs support for separated code segments in vcruntime140_1
|
||||
51598 cmd.exe crashes on "if exist" without arguments
|
||||
51821 EVE Online Client Crashes Due to differences in how Wine and Windows handle LdrGetDllPath with dwFlags 0x8 and relative path
|
||||
51860 Missing include for uid_t on musl-based systems
|
||||
51864 VeraCrypt Installer for 1.24-Update7 (Win8+) fails with HRESULT 0x800288BD
|
||||
51911 vbscript does not handle strings in if clauses
|
||||
51938 Safe Exam Browser needs "DNSDomain" from Win32_NetworkAdapterConfiguration
|
||||
51959 Missing procedure GetDayLightFlag
|
||||
51968 Winaero WEI Tool: Crash due to C:\windows\performance\winsat\datastore missing
|
||||
51978 Autodesk Fusion 360 crashes on unimplemented function msvcp140.dll.?table@?$ctype@D@std@@QEBAPEBFXZ
|
||||
51983 foobar2000 v1.5.1+ crashes on startup with Wine v6.6+ with Windows version set to "Windows 10"
|
||||
52076 Wrong icons placement when using a theme
|
||||
52082 Ace Ventura (CD-ROM) crashes on start
|
||||
52102 outSPOKEN 3.0 demo crashes on unimplemented function krnl386.exe16.GetLPErrMode
|
||||
52141 NetAPI detection in configure is broken
|
||||
52173 Kodi crashes on unimplemented function wsdapi.dll.WSDCreateDiscoveryProvider
|
||||
52200 Yamizome Liberator (demo): In-game video isn't played.
|
||||
52220 TMIDI Player, Cherry: Playback with multiple MIDI ports is broken
|
||||
52224 inetmib1:main test times out in linux
|
||||
52298 Opening PPT with Freeoffice Presentations crashes on unimplemented function ole32.dll.OleConvertIStorageToOLESTREAMEx
|
||||
52327 Wrong WM_CONTEXTMENU message default processing
|
||||
52349 Vortex Mod Manager Starts but Infinitely Loads
|
||||
52378 Python WMI module: AttributeError: wbemErrInvalidQuery
|
||||
52494 shell32 progman_dde tests crash if run immediately after prefix creation
|
||||
52583 ApiSetView does not display export ordinals correctly
|
||||
52626 MahjongSoul needs unimplemented function combase.dll.RoSetErrorReportingFlags
|
||||
|
||||
----------------------------------------------------------------
|
||||
|
||||
Changes since 6.0.3:
|
||||
|
||||
Akihiro Sagawa (1):
|
||||
quartz: Fix a race in IMediaFilter::Pause().
|
||||
|
||||
Alex Henrie (2):
|
||||
krnl386: Add GetLPErrMode stub.
|
||||
explorer: Only try to destroy the IShellWindows object if it exists.
|
||||
|
||||
Alexandre Julliard (3):
|
||||
configure: Fix the netapi check.
|
||||
krnl386.exe: Page-align the GlobalAlloc() size when the selector limit is in pages.
|
||||
user.exe: Make sure that the thunk selector doesn't get freed.
|
||||
|
||||
Bernhard Kölbl (1):
|
||||
oleaut32: Allow the registration of 64bit typelibs from a 32bit context.
|
||||
|
||||
Bernhard Übelacker (2):
|
||||
hhctrl.ocx: Handle only the number of bytes given in html_fragment_len.
|
||||
inetmib1: Fix endianess issue with dwLocalAddr and dwLocalPort.
|
||||
|
||||
Christian Costa (1):
|
||||
d3dx9: Also check for a valid alpha channel for TGA images.
|
||||
|
||||
Connor McAdams (2):
|
||||
oleacc: Implement AccessibleObjectFromEvent.
|
||||
winex11.drv: Add mutable pixel format awareness.
|
||||
|
||||
Derek Lesho (1):
|
||||
kernelbase: Fix parameter order of FindResourceExW call for non-localized path.
|
||||
|
||||
Doug Lyons (1):
|
||||
msvcrt: Do not acquire fd lock in msvcrt_create_io_inherit_block.
|
||||
|
||||
Eric Pouech (2):
|
||||
winedbg: Fix command line arguments parsing.
|
||||
cmd: Don't crash on 'if exist' without parameter.
|
||||
|
||||
Gabriel Ivăncescu (3):
|
||||
comctl32: Redraw children when the combo box is dropped down.
|
||||
user32: Redraw children when the combo box is dropped down.
|
||||
ddraw: Use WINED3D_SWAPCHAIN_NO_WINDOW_CHANGES only if window is not in foreground.
|
||||
|
||||
Gerald Pfeifer (1):
|
||||
configure: Diagnose if NetAPI is not present.
|
||||
|
||||
Hugh McMaster (1):
|
||||
conhost: Process Ctrl-M key input.
|
||||
|
||||
Huw D. M. Davies (1):
|
||||
user32: Set WM_CONTEXTMENU's wparam to the child window's handle.
|
||||
|
||||
Ismael Luceno (1):
|
||||
server: Fix missing include for uid_t.
|
||||
|
||||
Jacek Caban (1):
|
||||
ntdll: Fix handling \\.\CON path in RtlDosPathNameToNtPathName.
|
||||
|
||||
Jacek Konieczny (1):
|
||||
winealsa.drv: Use separate port for each output device.
|
||||
|
||||
Louis Lenders (5):
|
||||
wbemprox: Add empty DNSDomain to Win32_NetworkAdapterConfiguration.
|
||||
combase: Add stub for RoOriginateError.
|
||||
wsdapi: Add stub for WSDCreateDiscoveryProvider.
|
||||
wbemprox: Add some properties of SoftwareLicensingProduct class.
|
||||
ole32: Add stub for OleConvertIStorageToOLESTREAMEx.
|
||||
|
||||
Loïc Rebmeister (1):
|
||||
loader: Create performance\winsat\datastore on prefix creation.
|
||||
|
||||
Matteo Bruni (1):
|
||||
combase: Add RoSetErrorReportingFlags() stub.
|
||||
|
||||
Nick Fox (2):
|
||||
kernel32: Add tests for LdrGetDllPath with LOAD_WITH_ALTERED_SEARCH_PATH.
|
||||
ntdll: Fix LdrGetDllPath with LOAD_WITH_ALTERED_SEARCH_PATH without a path.
|
||||
|
||||
Nikolay Sivov (3):
|
||||
d3d11: Always initialize out view pointer in CreateRenderTargetView().
|
||||
include: Add WbemErrorEnum error codes.
|
||||
comctl32/listview: Initialize subitem text buffer before drawing each subitem.
|
||||
|
||||
- Winelib modules no longer link against libwine.so, or require it at
|
||||
run-time. This is a backwards incompatible change, meaning that
|
||||
modules built with Wine 6.0 won't run on older Wine versions.
|
||||
Olivier F. R. Dierick (1):
|
||||
taskschd: Set count to zero in regtasks_get_Count stub.
|
||||
|
||||
- The libwine library is no longer used, but it's still provided to
|
||||
support running Winelib modules built against older versions. It is
|
||||
deprecated however, and will be removed in a future Wine
|
||||
release. Applications that explicitly call libwine functions will
|
||||
need to be changed to call equivalent Win32 or Unix APIs instead.
|
||||
As a consequence, the wine/library.h header has also been removed.
|
||||
Piotr Caban (5):
|
||||
msvcp100: Export ctype<char>::table function.
|
||||
oleacc: Add AccessibleObjectFromPoint implementation.
|
||||
msvcrt: Don't use GetDaylightFlag function in _ftime64.
|
||||
vcruntime140_1: Add support for exception separated code segments.
|
||||
ucrtbase: Add support for r-value demangling in unDName.
|
||||
|
||||
- PE modules can be built with their debug information split to a
|
||||
separate file, to reduce the size of the files installed into the
|
||||
Wine prefix.
|
||||
Robert Wilhelm (1):
|
||||
vbscript: Support VT_BSTR in stack_pop_bool.
|
||||
|
||||
Rémi Bernon (1):
|
||||
ntdll: Use the unrolled memset from msvcrt.
|
||||
|
||||
*** Direct3D
|
||||
Thomas Faber (1):
|
||||
msvcrt/tests: Show that spawn does not require locking of fds.
|
||||
|
||||
- An experimental Vulkan renderer for WineD3D is implemented. This
|
||||
requires the vkd3d-shader library in order to translate Direct3D
|
||||
shaders to SPIR-V shaders. In this release, shader support in the
|
||||
Vulkan renderer is limited to shader model 4 and 5 shaders. In
|
||||
practice, that limits its usefulness to Direct3D 10 and 11
|
||||
applications. The Vulkan renderer can be enabled by setting the
|
||||
Direct3D "renderer" registry setting to "vulkan".
|
||||
|
||||
- The following Direct3D 11 features are implemented:
|
||||
- Per render-target ("independent") blend states.
|
||||
- Dual-source blending.
|
||||
- Multi-sample anti-aliasing sample masks.
|
||||
- Several more capability queries.
|
||||
|
||||
- Support for Direct3D 9 alpha-to-coverage multi-sampling is
|
||||
implemented.
|
||||
|
||||
- When the EXT_framebuffer_multisample_blit_scaled OpenGL extension is
|
||||
available, scaled multi-sample resolve operations can happen as a
|
||||
single operation.
|
||||
|
||||
- When the ARB_buffer_storage OpenGL extension is available, it will
|
||||
be used to allocate OpenGL buffer objects. This can result in minor
|
||||
performance improvements with some application and driver
|
||||
combinations.
|
||||
|
||||
- The Direct3D graphics card database recognizes more graphics cards,
|
||||
and the reported driver versions have been updated.
|
||||
|
||||
- New or modified HKEY_CURRENT_USER\Software\Wine\Direct3D registry keys:
|
||||
- "renderer" (REG_SZ)
|
||||
The backend API to target. This existing setting has an additional
|
||||
valid value in this release: "vulkan". Possible values are now
|
||||
"gl" (default) for OpenGL, "gdi" or "no3d" for GDI, and "vulkan"
|
||||
for Vulkan.
|
||||
- "csmt" (REG_DWORD)
|
||||
Enable or disable multi-threaded command stream features. This
|
||||
existing setting has an additional valid bit-field value in this
|
||||
release. Valid bit-fields in this release are:
|
||||
- 0x1 Enable the multi-threaded command stream feature.
|
||||
- 0x2 Enable serialization between multiple command streams in the
|
||||
same application. This feature is primarily useful for
|
||||
applications using multiple Direct3D instances from
|
||||
different threads, in combination with OpenGL drivers that
|
||||
do not properly support multi-threaded access themselves. As
|
||||
of this release, this is known to affect Microsoft Office
|
||||
2013 and later versions in combination with the Mesa-based
|
||||
Nouveau driver.
|
||||
Note that this setting is a bit-field; in order to enable both
|
||||
features above, set this to 0x3.
|
||||
|
||||
- Removed HKEY_CURRENT_USER\Software\Wine\Direct3D registry key:
|
||||
- "DirectDrawRenderer"
|
||||
This setting was previously deprecated in favor of the "renderer"
|
||||
setting, and has been removed in this release.
|
||||
|
||||
|
||||
*** D3DX
|
||||
|
||||
- Drawing text using the ID3DXFont interface is implemented.
|
||||
|
||||
- The ID3D12ShaderReflection shader reflection interface is
|
||||
implemented.
|
||||
|
||||
- The D3DX10GetImageInfoFromMemory() and related image information
|
||||
query functions are implemented.
|
||||
|
||||
|
||||
*** Graphics
|
||||
|
||||
- Drawing arcs, ellipses and rounded rectangles using the Direct2D API
|
||||
is implemented.
|
||||
|
||||
- The standard sRGB color profile is installed into the prefix, for
|
||||
applications that expect to load it directly.
|
||||
|
||||
- The Null display driver can be used as a proper display driver, for
|
||||
cases when a user interface is not needed.
|
||||
|
||||
- WindowsCodecs supports decoding images in DDS (DirectDraw Surface)
|
||||
and JPEG-XR formats, as well as encoding images to GIF format.
|
||||
|
||||
- The Vulkan driver creates the JSON manifest and registry entry used
|
||||
by the official Vulkan loader.
|
||||
|
||||
- The Vulkan driver supports up to version 1.2.162 of the Vulkan spec.
|
||||
|
||||
- There are a number of improvements in GdiPlus, including support for
|
||||
widening lines, more hatch styles, and more record types in
|
||||
metafiles.
|
||||
|
||||
|
||||
*** Audio / video
|
||||
|
||||
- The Media Foundation framework is more complete, including:
|
||||
- Initial Media Session implementation for state changes and data
|
||||
flow.
|
||||
- Initial Streaming Audio Renderer (SAR) pipeline component
|
||||
implementation.
|
||||
- Initial Video Renderer implementation, a pipeline component
|
||||
hosting EVR mixer and presenter.
|
||||
- Initial Topology Loader implementation.
|
||||
- Various fixes for the Source Reader.
|
||||
- Initial Media Engine implementation.
|
||||
- Asynchronous queues functionality is moved to rtworkq.dll.
|
||||
|
||||
- The AMStream (ActiveMovie Multimedia Streaming) library is more
|
||||
fully implemented, including support for streaming and sample
|
||||
management.
|
||||
|
||||
- The Video Mixing Renderer supports the following features:
|
||||
- Windowless and renderless mode.
|
||||
- Automatic stretching and resizing of the video to match the window
|
||||
size.
|
||||
- Hardware-accelerated color space conversion of YUV formats, if
|
||||
supported by the underlying Direct3D implementation.
|
||||
- Preservation of video aspect ratio via letterboxing.
|
||||
|
||||
- The Video Mixing Renderer is used as the default video renderer if
|
||||
supported by the underlying Direct3D implementation, replacing the
|
||||
GDI video renderer.
|
||||
|
||||
- The DirectShow File Writer filter is implemented.
|
||||
|
||||
- The DirectX Media Object (DMO) Wrapper filter is implemented. DMOs
|
||||
can be automatically enumerated and plugged into the filter graph.
|
||||
|
||||
- The video capture filter supports reporting more information about
|
||||
video formats, including supported sizes and frame rates.
|
||||
|
||||
- More Media Detector APIs are implemented.
|
||||
|
||||
- The GStreamer wrapper filter supports video and audio format
|
||||
conversion within the GStreamer pipeline. This obviates the need for
|
||||
extra transform filters, and accordingly the GStreamer-based YUV to
|
||||
ARGB converter, audio converter, and mp3 decoder have been
|
||||
removed. Any video can be output in any of several RGB and YUV
|
||||
formats, allowing for better performance in some cases.
|
||||
|
||||
- The Enhanced Video Renderer (EVR) contains an initial default mixer
|
||||
and presenter implementation using DXVA2 API.
|
||||
|
||||
- The XACT3 (Cross-platform Audio Creation) engine library and
|
||||
interfaces are implemented through FAudio.
|
||||
|
||||
|
||||
*** Text and fonts
|
||||
|
||||
- Text console support is reimplemented, using the architecture of
|
||||
recent Windows versions, which is closer to the Unix way of doing
|
||||
things. In particular:
|
||||
|
||||
- Pseudo consoles are implemented (equivalent to Unix pseudo TTYs).
|
||||
|
||||
- All console handling is done in the ConHost process. WineConsole
|
||||
is now only a thin wrapper around ConHost.
|
||||
|
||||
- ConHost handles VT escape sequences, meaning that the Unix Curses
|
||||
library is no longer needed.
|
||||
|
||||
- Default shaping features are enabled for all scripts in
|
||||
DirectWrite. All types of GSUB/GPOS lookups are supported.
|
||||
|
||||
- In DirectWrite, CMAP data is read directly from the font without
|
||||
global cache or a need to create FreeType objects, for improved
|
||||
performance.
|
||||
|
||||
- The font initialization in GDI32 avoids loading fonts through
|
||||
FreeType when possible, for faster startup times. The font registry
|
||||
cache is also more efficient.
|
||||
|
||||
- The Uniscribe support in the USP10 library is moved into GDI32, as
|
||||
per recent Windows versions.
|
||||
|
||||
- An initial version of the Webdings font is implemented, with only a
|
||||
few glyphs at this point.
|
||||
|
||||
|
||||
*** Input devices
|
||||
|
||||
- Raw input devices and messages are implemented, and used by
|
||||
DirectInput instead of less efficient low-level hooks.
|
||||
|
||||
- An initial USB kernel driver is implemented, based on the LibUSB
|
||||
library, to provide access to USB devices.
|
||||
|
||||
- Mouse position history is implemented, for games that want more
|
||||
precise mouse positions.
|
||||
|
||||
- SDL controller mappings can be set through the
|
||||
'SDL_GAMECONTROLLERCONFIG' environment variable.
|
||||
|
||||
- Plug & Play device notifications are implemented.
|
||||
|
||||
|
||||
*** Desktop integration
|
||||
|
||||
- Display settings are retrieved through XRandR 1.4 if available. This
|
||||
also provides support for multiple display orientations.
|
||||
|
||||
- There is a consistent view of the graphics adapters across the X11,
|
||||
OpenGL and Vulkan APIs.
|
||||
|
||||
- The desktop work area layout is supported on multi-monitor setups
|
||||
using the _GTK_WORKAREAS property.
|
||||
|
||||
|
||||
*** Internationalization
|
||||
|
||||
- Unicode character tables are based on version 13.0.0 of the Unicode
|
||||
Standard.
|
||||
|
||||
- Unicode normalization is fully standard-compliant, including support
|
||||
for Hangul, supplementary character planes, and IDN normalization.
|
||||
|
||||
- Codepage and other Unicode tables are stored in external NLS files
|
||||
compatible with Windows. This makes it possible to test with the
|
||||
native files to track down character mapping issues.
|
||||
|
||||
- Codepage mapping tables are generated from Microsoft's Open
|
||||
Specification data for better compatibility.
|
||||
|
||||
- Unicode linguistic case mappings for languages like Turkish are
|
||||
implemented.
|
||||
|
||||
- Codepage 708 (Arabic ASMO) is supported.
|
||||
|
||||
|
||||
*** Kernel
|
||||
|
||||
- Windows version compatibility mode is implemented, to only report
|
||||
the newest Windows versions to applications that have declared that
|
||||
they support them.
|
||||
|
||||
- INI file mappings are implemented, to redirect .ini file entries to
|
||||
registry keys.
|
||||
|
||||
- Many more NT kernel objects and functions are implemented, to
|
||||
support anti-cheat systems that load kernel drivers.
|
||||
|
||||
- A NetIO.sys kernel driver is implemented, to support copy protection
|
||||
drivers that want to access the network.
|
||||
|
||||
- AVX registers are supported in register contexts and exception
|
||||
handling on x86 platforms.
|
||||
|
||||
- The Kernel User Shared Data block contains up-to-date timestamps, to
|
||||
avoid system calls when retrieving the current time counter.
|
||||
|
||||
|
||||
*** C Runtime
|
||||
|
||||
- The C runtime import libraries provide the necessary runtime support
|
||||
so that PE modules no longer depend on the MinGW runtime.
|
||||
|
||||
- The Wine modules are all built against the new UCRT runtime.
|
||||
|
||||
- Winegcc uses the new UCRT runtime by default, unless an older C
|
||||
runtime library is explicitly imported.
|
||||
|
||||
- The C runtime supports Windows locales that use the UTF-8 codepage.
|
||||
|
||||
- A number of C runtime math functions are implemented internally
|
||||
based on code from the Musl C library, to avoid depending on the
|
||||
system math library.
|
||||
|
||||
- Floating point formatting is reimplemented in the C runtime to avoid
|
||||
depending on the system printf function.
|
||||
|
||||
|
||||
*** Internet and networking
|
||||
|
||||
- The Gecko engine is updated to version 2.47.2.
|
||||
|
||||
- The WebSocket API is implemented.
|
||||
|
||||
- JScript and VBScript report the correct location for errors in
|
||||
scripts.
|
||||
|
||||
- There are various improvements to the LDAP and Active Directory
|
||||
Service support.
|
||||
|
||||
- There is an initial implementation of the NDIS network driver.
|
||||
|
||||
- The OLE data link dialog supports configuring the ODBC data
|
||||
connection.
|
||||
|
||||
|
||||
*** Cryptography
|
||||
|
||||
- The BCrypt library supports additional algorithms, including DSA
|
||||
keys and the 3DES cipher.
|
||||
|
||||
- The DSSENH (Digital Signatures) Cryptographic Provider is
|
||||
implemented, and enabled by default.
|
||||
|
||||
|
||||
*** Alternative platforms
|
||||
|
||||
- Support for exception handling and stack unwinding on ARM platforms
|
||||
(both 32-bit and 64-bit) should be on par with the x86
|
||||
architectures.
|
||||
|
||||
- There is initial support for ARM64 on macOS, for the new Apple
|
||||
Silicon.
|
||||
|
||||
- Support for the obsolete 32-bit PowerPC architecture is removed. It
|
||||
had been broken for some time already.
|
||||
|
||||
- Case-insensitive filesystem optimizations are enabled on FreeBSD.
|
||||
|
||||
|
||||
*** Builtin applications
|
||||
|
||||
- WineCfg supports querying and modifying the configured Windows
|
||||
version through the command line with a new /v option.
|
||||
|
||||
- The Shell Folders configuration in WineCfg also supports the
|
||||
Downloads and Templates folders.
|
||||
|
||||
- The removable drive autodetection has been removed in WineCfg, now
|
||||
that the dbus dynamic device support is stable.
|
||||
|
||||
- The FSUTIL tool supports a 'hardlink' command to create hard links.
|
||||
|
||||
- The FIND tool supports searching multiple files, in addition to
|
||||
standard input.
|
||||
|
||||
- The WHOAMI tool is implemented to display the current username.
|
||||
|
||||
|
||||
*** Development tools
|
||||
|
||||
- Winegcc supports generating PDB files when building PE DLLs, for
|
||||
compatibility with Windows debuggers.
|
||||
|
||||
- DbgHelp supports GNU-style debug information also in PE files.
|
||||
|
||||
- Winegcc can generate an import library directly when building a DLL,
|
||||
with the '-Wl,--out-implib' option.
|
||||
|
||||
- The various build tools also look for include and library files in
|
||||
paths relative to the tool binary, to allow relocatable Winelib
|
||||
installations.
|
||||
|
||||
- The Resource Compiler (wrc) and Message Compiler (wmc) use the
|
||||
external NLS files for codepage conversions. If necessary, the path
|
||||
to the external files can be specified with the '--nls-dir' option.
|
||||
|
||||
- There are various improvements in the gdb proxy mode in WineDbg,
|
||||
including support for hardware watchpoints, and for loading symbols
|
||||
from PE modules.
|
||||
|
||||
- The Message Compiler (wmc) handles the Unicode BOM to detect the
|
||||
input file format.
|
||||
|
||||
- The Resource Compiler (wrc) has a '--utf8' option to specify UTF-8
|
||||
input, as an alternative to putting #pragma codepage inside the
|
||||
file.
|
||||
|
||||
- The IDL compiler (widl) supports a WinRT mode, and various
|
||||
constructs specific to that mode.
|
||||
|
||||
- The IDL compiler (widl) supports custom attributes in type
|
||||
libraries.
|
||||
|
||||
|
||||
*** Build infrastructure
|
||||
|
||||
- Makefiles are no longer recursive; a single Makefile is generated to
|
||||
build the entire tree, with correct dependencies between modules.
|
||||
|
||||
- Automake-style silent build rules are supported. They are disabled
|
||||
by default, but can be enabled by passing the '--enable-silent-rules'
|
||||
option to configure.
|
||||
|
||||
- The new LLVM-MinGW compiler is supported for PE cross-compilation.
|
||||
|
||||
- Building with the Clang compiler in MSVC mode is supported.
|
||||
|
||||
- A '-syscall' entry point flag is supported in spec files, to
|
||||
generate NT-style system call entry points.
|
||||
|
||||
|
||||
*** Miscellaneous
|
||||
|
||||
- The Mono engine is updated to version 5.1.1, containing the open
|
||||
sourced parts of the WPF framework, and initial replacements for
|
||||
some of the closed source parts.
|
||||
|
||||
- Most modules have been converted to use wide-character string
|
||||
constants like L"abc" instead of explicit arrays, for more readable
|
||||
code.
|
||||
|
||||
- Many of the less common timezones (for various remote islands) are
|
||||
supported.
|
||||
|
||||
- Listviews and image buttons are supported in MSI installers.
|
||||
|
||||
- There is initial support for the Print Ticket API.
|
||||
|
||||
|
||||
*** New external dependencies
|
||||
|
||||
- The LibUSB library is used to implement the USB driver.
|
||||
|
||||
- The VkD3D-Shader library is used to translate Direct3D shaders to
|
||||
SPIR-V shaders for the WineD3D Vulkan renderer.
|
||||
|
||||
- The Curses, GLU, and Zlib libraries are no longer used.
|
||||
Zebediah Figura (1):
|
||||
ntdll/tests: Add more tests for RtlDosPathNameToNtPathName_U().
|
||||
|
||||
Zhiyi Zhang (1):
|
||||
comctl32/button: Support image list margin for buttons with BS_CENTER or BS_VCENTER.
|
||||
|
||||
--
|
||||
Alexandre Julliard
|
||||
julliard@winehq.org
|
||||
Michael Stefaniuc
|
||||
mstefani@winehq.org
|
||||
|
|
17
AUTHORS
17
AUTHORS
|
@ -112,6 +112,7 @@ Andrej Znidarsic
|
|||
Andre Malafaya Baptista
|
||||
Andrew Bogott
|
||||
Andrew Borodin
|
||||
Andrew Boyarshin
|
||||
Andrew Bulhak
|
||||
Andrew Church
|
||||
Andrew Cook
|
||||
|
@ -194,6 +195,7 @@ Bernd Fuhrmann
|
|||
Bernd Herd
|
||||
Bernd Paysan
|
||||
Bernd Schmidt
|
||||
Bernhard Kölbl
|
||||
Bernhard Loos
|
||||
Bernhard Reiter
|
||||
Bernhard Rosenkränzer
|
||||
|
@ -395,6 +397,7 @@ David Quintana
|
|||
David Smith
|
||||
David Torok
|
||||
David Welch
|
||||
David White
|
||||
David Woodhouse
|
||||
Davin McCall
|
||||
Dean M Greer
|
||||
|
@ -425,6 +428,7 @@ Don Kelly
|
|||
Donna Whisnant
|
||||
Donn Miller
|
||||
Douglas Ridgway
|
||||
Doug Lyons
|
||||
Doug Paul
|
||||
Drew Ronneberg
|
||||
Dridi Boukelmoune
|
||||
|
@ -505,11 +509,13 @@ Filip Frąckiewicz
|
|||
Filip Navara
|
||||
Finlo Boyde
|
||||
Flávio J. Saraiva
|
||||
Florian Eder
|
||||
Florian Goth
|
||||
Florian Köberle
|
||||
Florian Pelz
|
||||
Florian Tobias Schandinat
|
||||
Florian Will
|
||||
Floris Renaud
|
||||
Fons Botman
|
||||
Francesco Di Punzio
|
||||
Francesco Noferi
|
||||
|
@ -624,6 +630,7 @@ Hilko Bengen
|
|||
Hin-Tak Leung
|
||||
Hippocrates Sendoukas
|
||||
Hirofumi Katayama
|
||||
Hiroki Awata
|
||||
Hiroshi Inoue
|
||||
Hiroshi Miura
|
||||
Hiroshi Tanabe
|
||||
|
@ -657,6 +664,7 @@ Ingo Schneider
|
|||
Isabella Bosia
|
||||
Isira Seneviratne
|
||||
Ismael Barros
|
||||
Ismael Luceno
|
||||
İsmail Dönmez
|
||||
Itai Nahshon
|
||||
Ivan de Saedeleer
|
||||
|
@ -824,6 +832,7 @@ John Sheu
|
|||
John Thomson
|
||||
John Voltz
|
||||
John Zero
|
||||
John Zourlios
|
||||
Jonas Maebe
|
||||
Jonas Wielicki
|
||||
Jonathan Buzzard
|
||||
|
@ -891,6 +900,7 @@ Kai Krakow
|
|||
Kai Morich
|
||||
Kai Tietz
|
||||
Kaj Kaloinen
|
||||
Kalen Alwardt
|
||||
Kalevi J Hautaniemi
|
||||
Kamil Pošvic
|
||||
Kanit Therdsteerasukdi
|
||||
|
@ -994,6 +1004,7 @@ Lionel Ulmer
|
|||
Liu Spider
|
||||
Loïc Hoguin
|
||||
Loïc Maury
|
||||
Loïc Rebmeister
|
||||
Louis Lenders
|
||||
Louis Philippe Gagnon
|
||||
L. Rahyen
|
||||
|
@ -1150,6 +1161,7 @@ Michal Pasternak
|
|||
Michal Suchanek
|
||||
Michał Wiernowolski
|
||||
Michał Ziętek
|
||||
Michele Dionisio
|
||||
Michiel van Loon
|
||||
Miguel de Icaza
|
||||
Mihail Ivanchev
|
||||
|
@ -1198,9 +1210,11 @@ Neil Olver
|
|||
Neil Skrypuch
|
||||
Nemeth Peter
|
||||
Nerijus Baliunas
|
||||
Nguyễn Chính Hữu
|
||||
Nicholas Niro
|
||||
Nick Bowler
|
||||
Nick Burns
|
||||
Nick Fox
|
||||
Nick Holloway
|
||||
Nickolay V. Shmyrev
|
||||
Niclas Karlsson
|
||||
|
@ -1230,6 +1244,7 @@ Ofir Petruska
|
|||
Olaf Flebbe
|
||||
Oldřich Jedlička
|
||||
Oleg Bosis
|
||||
Oleg Dubinskiy
|
||||
Oleg Korda
|
||||
Oleg Krylov
|
||||
Oleg Prokhorov
|
||||
|
@ -1473,6 +1488,7 @@ Samuele Guerrini
|
|||
Samuel Lidén Borell
|
||||
Sander van Leeuwen
|
||||
Sandijs Ribaks
|
||||
Sanghoon Park
|
||||
Santosh Siddheshwar
|
||||
Sasha Slijepcevic
|
||||
Sato Kazuyuki
|
||||
|
@ -1577,6 +1593,7 @@ Sylvain Petreolle
|
|||
Sylvain St-Germain
|
||||
Tapio Kautto
|
||||
Tatyana Fokina
|
||||
Ted Lyngmo
|
||||
Ted Percival
|
||||
Thanasis Papoutsidakis
|
||||
Theodore Dubois
|
||||
|
|
4
README
4
README
|
@ -75,7 +75,7 @@ Supported file systems:
|
|||
|
||||
Basic requirements:
|
||||
You need to have the X11 development include files installed
|
||||
(called xlib6g-dev in Debian and XFree86-devel in Red Hat).
|
||||
(called xorg-dev in Debian and libX11-devel in Red Hat).
|
||||
|
||||
Of course you also need "make" (most likely GNU make).
|
||||
|
||||
|
@ -159,7 +159,7 @@ Bugs: Report bugs to Wine Bugzilla at https://bugs.winehq.org
|
|||
Please search the bugzilla database to check whether your
|
||||
problem is already known or fixed before posting a bug report.
|
||||
|
||||
IRC: Online help is available at channel #WineHQ on irc.freenode.net.
|
||||
IRC: Online help is available at channel #WineHQ on irc.libera.chat.
|
||||
|
||||
Git: The current Wine development tree is available through Git.
|
||||
Go to https://www.winehq.org/git for more information.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.69 for Wine 6.0.
|
||||
# Generated by GNU Autoconf 2.69 for Wine 6.0.4.
|
||||
#
|
||||
# Report bugs to <wine-devel@winehq.org>.
|
||||
#
|
||||
|
@ -580,8 +580,8 @@ MAKEFLAGS=
|
|||
# Identity of this package.
|
||||
PACKAGE_NAME='Wine'
|
||||
PACKAGE_TARNAME='wine'
|
||||
PACKAGE_VERSION='6.0'
|
||||
PACKAGE_STRING='Wine 6.0'
|
||||
PACKAGE_VERSION='6.0.4'
|
||||
PACKAGE_STRING='Wine 6.0.4'
|
||||
PACKAGE_BUGREPORT='wine-devel@winehq.org'
|
||||
PACKAGE_URL='https://www.winehq.org'
|
||||
|
||||
|
@ -2492,7 +2492,7 @@ if test "$ac_init_help" = "long"; then
|
|||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures Wine 6.0 to adapt to many kinds of systems.
|
||||
\`configure' configures Wine 6.0.4 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
|
@ -2562,7 +2562,7 @@ fi
|
|||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of Wine 6.0:";;
|
||||
short | recursive ) echo "Configuration of Wine 6.0.4:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
|
@ -2711,8 +2711,8 @@ Some influential environment variables:
|
|||
SDL2_CFLAGS C compiler flags for sdl2, overriding pkg-config
|
||||
SDL2_LIBS Linker flags for sdl2, overriding pkg-config
|
||||
FAUDIO_CFLAGS
|
||||
C compiler flags for faudio, overriding pkg-config
|
||||
FAUDIO_LIBS Linker flags for faudio, overriding pkg-config
|
||||
C compiler flags for FAudio, overriding pkg-config
|
||||
FAUDIO_LIBS Linker flags for FAudio, overriding pkg-config
|
||||
CAPI20_CFLAGS
|
||||
C compiler flags for capi20, overriding pkg-config
|
||||
CAPI20_LIBS Linker flags for capi20, overriding pkg-config
|
||||
|
@ -2816,7 +2816,7 @@ fi
|
|||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
Wine configure 6.0
|
||||
Wine configure 6.0.4
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
|
@ -3500,7 +3500,7 @@ cat >config.log <<_ACEOF
|
|||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by Wine $as_me 6.0, which was
|
||||
It was created by Wine $as_me 6.0.4, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
|
@ -8719,10 +8719,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|||
SYSTEMCONFIGURATION_LIBS="-framework SystemConfiguration"
|
||||
|
||||
|
||||
WINELOADER_LDFLAGS="-Wl,-pie,-pagezero_size,0x1000,-sectcreate,__TEXT,__info_plist,loader/wine_info.plist"
|
||||
WINELOADER_LDFLAGS="-Wl,-pie,-segalign,0x1000,-pagezero_size,0x1000,-sectcreate,__TEXT,__info_plist,loader/wine_info.plist"
|
||||
|
||||
wine_can_build_preloader=yes
|
||||
WINEPRELOADER_LDFLAGS="-nostartfiles -nodefaultlibs -e _start -ldylib1.o -Wl,-image_base,0x7d400000,-pagezero_size,0x1000,-sectcreate,__TEXT,__info_plist,loader/wine_info.plist"
|
||||
WINEPRELOADER_LDFLAGS="-nostartfiles -nodefaultlibs -e _start -ldylib1.o -Wl,-image_base,0x7d400000,-segalign,0x1000,-pagezero_size,0x1000,-sectcreate,__TEXT,__info_plist,loader/wine_info.plist,-segaddr,WINE_4GB_RESERVE,0x100000000"
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -Wl,-no_new_main -e _main" >&5
|
||||
$as_echo_n "checking whether the compiler supports -Wl,-no_new_main -e _main... " >&6; }
|
||||
if ${ac_cv_cflags__Wl__no_new_main__e__main+:} false; then :
|
||||
|
@ -14015,7 +14015,7 @@ else
|
|||
int
|
||||
main ()
|
||||
{
|
||||
if (!(_res.options & RES_INIT)) res_init(); res_query("foo",ns_c_in,0,0,0)
|
||||
if (!(_res.options & RES_INIT)) res_init(); res_query("foo",ns_c_in,0,0,0); ns_initparse(0,0,0)
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
|
@ -14491,16 +14491,7 @@ $as_echo "$as_me:${as_lineno-$LINENO}: gstreamer-1.0 gstreamer-video-1.0 gstream
|
|||
$as_echo "$as_me:${as_lineno-$LINENO}: gstreamer-1.0 gstreamer-video-1.0 gstreamer-audio-1.0 libs: $GSTREAMER_LIBS" >&5
|
||||
ac_save_CPPFLAGS=$CPPFLAGS
|
||||
CPPFLAGS="$CPPFLAGS $GSTREAMER_CFLAGS"
|
||||
ac_gst_incl=""
|
||||
for i in $GSTREAMER_CFLAGS
|
||||
do
|
||||
case "$i" in
|
||||
-I*) ac_gst_incl="$ac_gst_incl $i";;
|
||||
esac
|
||||
done
|
||||
GSTREAMER_CFLAGS=$ac_gst_incl
|
||||
CPPFLAGS="$ac_save_CPPFLAGS $GSTREAMER_CFLAGS"
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "gst/gst.h" "ac_cv_header_gst_gst_h" "$ac_includes_default"
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "gst/gst.h" "ac_cv_header_gst_gst_h" "$ac_includes_default"
|
||||
if test "x$ac_cv_header_gst_gst_h" = xyes; then :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gint64 defined by gst/gst.h is indeed 64-bit" >&5
|
||||
$as_echo_n "checking whether gint64 defined by gst/gst.h is indeed 64-bit... " >&6; }
|
||||
|
@ -15016,19 +15007,19 @@ if test "x$with_faudio" != "xno"
|
|||
then
|
||||
if ${FAUDIO_CFLAGS:+false} :; then :
|
||||
if ${PKG_CONFIG+:} false; then :
|
||||
FAUDIO_CFLAGS=`$PKG_CONFIG --cflags faudio 2>/dev/null`
|
||||
FAUDIO_CFLAGS=`$PKG_CONFIG --cflags FAudio 2>/dev/null`
|
||||
fi
|
||||
fi
|
||||
|
||||
if ${FAUDIO_LIBS:+false} :; then :
|
||||
if ${PKG_CONFIG+:} false; then :
|
||||
FAUDIO_LIBS=`$PKG_CONFIG --libs faudio 2>/dev/null`
|
||||
FAUDIO_LIBS=`$PKG_CONFIG --libs FAudio 2>/dev/null`
|
||||
fi
|
||||
fi
|
||||
|
||||
FAUDIO_LIBS=${FAUDIO_LIBS:-"-lFAudio"}
|
||||
$as_echo "$as_me:${as_lineno-$LINENO}: faudio cflags: $FAUDIO_CFLAGS" >&5
|
||||
$as_echo "$as_me:${as_lineno-$LINENO}: faudio libs: $FAUDIO_LIBS" >&5
|
||||
$as_echo "$as_me:${as_lineno-$LINENO}: FAudio cflags: $FAUDIO_CFLAGS" >&5
|
||||
$as_echo "$as_me:${as_lineno-$LINENO}: FAudio libs: $FAUDIO_LIBS" >&5
|
||||
ac_save_CPPFLAGS=$CPPFLAGS
|
||||
CPPFLAGS="$CPPFLAGS $FAUDIO_CFLAGS"
|
||||
for ac_header in FAudio.h
|
||||
|
@ -16469,6 +16460,17 @@ fi
|
|||
CPPFLAGS=$ac_save_CPPFLAGS
|
||||
|
||||
fi
|
||||
if test "x$ac_cv_lib_soname_netapi" = "x"
|
||||
then :
|
||||
case "x$with_netapi" in
|
||||
x) as_fn_append wine_notices "|libnetapi not found, Samba NetAPI won't be supported." ;;
|
||||
xno) ;;
|
||||
*) as_fn_error $? "libnetapi not found, Samba NetAPI won't be supported.
|
||||
This is an error since --with-netapi was requested." "$LINENO" 5 ;;
|
||||
esac
|
||||
enable_netapi=${enable_netapi:-no}
|
||||
fi
|
||||
|
||||
|
||||
if test "x$enable_winealsa_drv$enable_winecoreaudio_drv$enable_winepulse_drv$enable_wineoss_drv$enable_wineandroid_drv" = xnonononono -a \
|
||||
"x$with_alsa$with_coreaudio$with_oss$with_pulse" != xnononono
|
||||
|
@ -17769,6 +17771,7 @@ for ac_func in \
|
|||
setprogname \
|
||||
sigprocmask \
|
||||
symlink \
|
||||
sysinfo \
|
||||
tcdrain \
|
||||
thr_kill2
|
||||
|
||||
|
@ -20534,6 +20537,7 @@ wine_fn_config_makefile dlls/msvcp120_app enable_msvcp120_app
|
|||
wine_fn_config_makefile dlls/msvcp140 enable_msvcp140
|
||||
wine_fn_config_makefile dlls/msvcp140/tests enable_tests
|
||||
wine_fn_config_makefile dlls/msvcp140_1 enable_msvcp140_1
|
||||
wine_fn_config_makefile dlls/msvcp140_1/tests enable_tests
|
||||
wine_fn_config_makefile dlls/msvcp60 enable_msvcp60
|
||||
wine_fn_config_makefile dlls/msvcp60/tests enable_tests
|
||||
wine_fn_config_makefile dlls/msvcp70 enable_msvcp70
|
||||
|
@ -21681,7 +21685,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
|||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by Wine $as_me 6.0, which was
|
||||
This file was extended by Wine $as_me 6.0.4, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
|
@ -21752,7 +21756,7 @@ _ACEOF
|
|||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||
ac_cs_version="\\
|
||||
Wine config.status 6.0
|
||||
Wine config.status 6.0.4
|
||||
configured by $0, generated by GNU Autoconf 2.69,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
|
25
configure.ac
25
configure.ac
|
@ -742,10 +742,10 @@ case $host_os in
|
|||
AC_SUBST(APPKIT_LIBS,"-framework AppKit")
|
||||
AC_SUBST(SYSTEMCONFIGURATION_LIBS,"-framework SystemConfiguration")
|
||||
|
||||
WINELOADER_LDFLAGS="-Wl,-pie,-pagezero_size,0x1000,-sectcreate,__TEXT,__info_plist,loader/wine_info.plist"
|
||||
WINELOADER_LDFLAGS="-Wl,-pie,-segalign,0x1000,-pagezero_size,0x1000,-sectcreate,__TEXT,__info_plist,loader/wine_info.plist"
|
||||
|
||||
wine_can_build_preloader=yes
|
||||
WINEPRELOADER_LDFLAGS="-nostartfiles -nodefaultlibs -e _start -ldylib1.o -Wl,-image_base,0x7d400000,-pagezero_size,0x1000,-sectcreate,__TEXT,__info_plist,loader/wine_info.plist"
|
||||
WINEPRELOADER_LDFLAGS="-nostartfiles -nodefaultlibs -e _start -ldylib1.o -Wl,-image_base,0x7d400000,-segalign,0x1000,-pagezero_size,0x1000,-sectcreate,__TEXT,__info_plist,loader/wine_info.plist,-segaddr,WINE_4GB_RESERVE,0x100000000"
|
||||
WINE_TRY_CFLAGS([-Wl,-no_new_main -e _main],
|
||||
[WINEPRELOADER_LDFLAGS="-Wl,-no_new_main $WINEPRELOADER_LDFLAGS"
|
||||
WINE_TRY_CFLAGS([-Wl,-no_new_main -e _main -nostartfiles -nodefaultlibs],,
|
||||
|
@ -1482,7 +1482,7 @@ then
|
|||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#ifdef HAVE_NETINET_IN_H
|
||||
#include <netinet/in.h>
|
||||
#endif
|
||||
#include <resolv.h>]],[[if (!(_res.options & RES_INIT)) res_init(); res_query("foo",ns_c_in,0,0,0)]])],
|
||||
#include <resolv.h>]],[[if (!(_res.options & RES_INIT)) res_init(); res_query("foo",ns_c_in,0,0,0); ns_initparse(0,0,0)]])],
|
||||
[ac_cv_have_resolv=${lib:-"none required"}],[ac_cv_have_resolv="not found"])
|
||||
test "x$ac_cv_have_resolv" = "xnot found" || break
|
||||
done
|
||||
|
@ -1588,16 +1588,7 @@ dnl **** Check for gstreamer ****
|
|||
if test "x$with_gstreamer" != "xno"
|
||||
then
|
||||
WINE_PACKAGE_FLAGS(GSTREAMER,[gstreamer-1.0 gstreamer-video-1.0 gstreamer-audio-1.0],,,,
|
||||
[ac_gst_incl=""
|
||||
for i in $GSTREAMER_CFLAGS
|
||||
do
|
||||
case "$i" in
|
||||
-I*) ac_gst_incl="$ac_gst_incl $i";;
|
||||
esac
|
||||
done
|
||||
GSTREAMER_CFLAGS=$ac_gst_incl
|
||||
CPPFLAGS="$ac_save_CPPFLAGS $GSTREAMER_CFLAGS"
|
||||
AC_CHECK_HEADER([gst/gst.h],
|
||||
[AC_CHECK_HEADER([gst/gst.h],
|
||||
[AC_MSG_CHECKING([whether gint64 defined by gst/gst.h is indeed 64-bit])
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <gst/gst.h>]],
|
||||
[[static int a[sizeof(gint64) > 4 ? 1 : -1]; if (a[0]) return 0;]])],
|
||||
|
@ -1704,7 +1695,7 @@ WINE_NOTICE_WITH(sdl,[test "x$ac_cv_lib_soname_SDL2" = "x"],
|
|||
dnl **** Check for FAudio ****
|
||||
if test "x$with_faudio" != "xno"
|
||||
then
|
||||
WINE_PACKAGE_FLAGS(FAUDIO,[faudio],[-lFAudio],,,
|
||||
WINE_PACKAGE_FLAGS(FAUDIO,[FAudio],[-lFAudio],,,
|
||||
[AC_CHECK_HEADERS([FAudio.h],
|
||||
[WINE_CHECK_SONAME(FAudio,FAudioCreate,,,[$FAUDIO_LIBS],[[libFAudio*]])])
|
||||
WINE_CHECK_LIB_FUNCS([FAudio_CommitOperationSet \
|
||||
|
@ -1939,6 +1930,10 @@ then
|
|||
WINE_PACKAGE_FLAGS(NETAPI,[netapi],,,,
|
||||
[WINE_CHECK_SONAME(netapi,libnetapi_init,,[AC_DEFINE_UNQUOTED(SONAME_LIBNETAPI,["libnetapi.$LIBEXT"])],[$NETAPI_LIBS])])
|
||||
fi
|
||||
WINE_NOTICE_WITH(netapi,[test "x$ac_cv_lib_soname_netapi" = "x"],
|
||||
[libnetapi not found, Samba NetAPI won't be supported.],
|
||||
[enable_netapi])
|
||||
|
||||
|
||||
dnl **** Check for any sound system ****
|
||||
if test "x$enable_winealsa_drv$enable_winecoreaudio_drv$enable_winepulse_drv$enable_wineoss_drv$enable_wineandroid_drv" = xnonononono -a \
|
||||
|
@ -2169,6 +2164,7 @@ AC_CHECK_FUNCS(\
|
|||
setprogname \
|
||||
sigprocmask \
|
||||
symlink \
|
||||
sysinfo \
|
||||
tcdrain \
|
||||
thr_kill2
|
||||
)
|
||||
|
@ -3456,6 +3452,7 @@ WINE_CONFIG_MAKEFILE(dlls/msvcp120_app)
|
|||
WINE_CONFIG_MAKEFILE(dlls/msvcp140)
|
||||
WINE_CONFIG_MAKEFILE(dlls/msvcp140/tests)
|
||||
WINE_CONFIG_MAKEFILE(dlls/msvcp140_1)
|
||||
WINE_CONFIG_MAKEFILE(dlls/msvcp140_1/tests)
|
||||
WINE_CONFIG_MAKEFILE(dlls/msvcp60)
|
||||
WINE_CONFIG_MAKEFILE(dlls/msvcp60/tests)
|
||||
WINE_CONFIG_MAKEFILE(dlls/msvcp70)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
EXTRADEFS = -D_ADVAPI32_
|
||||
MODULE = advapi32.dll
|
||||
IMPORTLIB = advapi32
|
||||
IMPORTS = kernelbase sechost
|
||||
IMPORTS = kernelbase sechost msvcrt
|
||||
DELAYIMPORTS = rpcrt4
|
||||
|
||||
EXTRADLLFLAGS = -mno-cygwin
|
||||
|
|
|
@ -452,7 +452,7 @@
|
|||
@ stub LsaDelete
|
||||
@ stdcall LsaDeleteTrustedDomain(ptr ptr)
|
||||
@ stdcall LsaEnumerateAccountRights(ptr ptr ptr ptr)
|
||||
@ stub LsaEnumerateAccounts
|
||||
@ stdcall LsaEnumerateAccounts(ptr ptr ptr long ptr)
|
||||
@ stdcall LsaEnumerateAccountsWithUserRight(ptr ptr ptr ptr)
|
||||
@ stub LsaEnumeratePrivileges
|
||||
@ stub LsaEnumeratePrivilegesOfAccount
|
||||
|
|
|
@ -236,6 +236,22 @@ NTSTATUS WINAPI LsaEnumerateAccountRights(
|
|||
return STATUS_OBJECT_NAME_NOT_FOUND;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* LsaEnumerateAccounts [ADVAPI32.@]
|
||||
*
|
||||
*/
|
||||
NTSTATUS WINAPI LsaEnumerateAccounts(
|
||||
LSA_HANDLE policy,
|
||||
PLSA_ENUMERATION_HANDLE context,
|
||||
PVOID *buffer,
|
||||
ULONG maxlen,
|
||||
PULONG count)
|
||||
{
|
||||
FIXME("(%p,%p,%p,%d,%p) stub\n", policy, context, buffer, maxlen, count);
|
||||
if (count) *count = 0;
|
||||
return STATUS_NO_MORE_ENTRIES;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* LsaEnumerateAccountsWithUserRight [ADVAPI32.@]
|
||||
*
|
||||
|
|
|
@ -1083,10 +1083,25 @@ todo_wine {
|
|||
SetLastError(0xdeadbeef);
|
||||
rc = AccessCheck(sd, token, DELETE, &mapping, &priv_set, &priv_set_len, &granted, &status);
|
||||
ok(rc, "AccessCheck error %d\n", GetLastError());
|
||||
todo_wine {
|
||||
ok(status == 1, "expected 1, got %d\n", status);
|
||||
ok(granted == DELETE, "expected DELETE, got %#x\n", granted);
|
||||
}
|
||||
|
||||
granted = 0xdeadbeef;
|
||||
status = 0xdeadbeef;
|
||||
SetLastError(0xdeadbeef);
|
||||
rc = AccessCheck(sd, token, WRITE_OWNER, &mapping, &priv_set, &priv_set_len, &granted, &status);
|
||||
ok(rc, "AccessCheck error %d\n", GetLastError());
|
||||
ok(status == 1, "expected 1, got %d\n", status);
|
||||
ok(granted == WRITE_OWNER, "expected WRITE_OWNER, got %#x\n", granted);
|
||||
|
||||
granted = 0xdeadbeef;
|
||||
status = 0xdeadbeef;
|
||||
SetLastError(0xdeadbeef);
|
||||
rc = AccessCheck(sd, token, SYNCHRONIZE, &mapping, &priv_set, &priv_set_len, &granted, &status);
|
||||
ok(rc, "AccessCheck error %d\n", GetLastError());
|
||||
ok(status == 1, "expected 1, got %d\n", status);
|
||||
ok(granted == SYNCHRONIZE, "expected SYNCHRONIZE, got %#x\n", granted);
|
||||
|
||||
granted = 0xdeadbeef;
|
||||
status = 0xdeadbeef;
|
||||
SetLastError(0xdeadbeef);
|
||||
|
|
|
@ -18,9 +18,9 @@
|
|||
|
||||
#define WINE_FILEDESCRIPTION_STR "Wine advapi32 dll"
|
||||
#define WINE_FILENAME_STR "advapi32.dll"
|
||||
#define WINE_FILEVERSION 5,1,2600,2180
|
||||
#define WINE_FILEVERSION_STR "5.1.2600.2180"
|
||||
#define WINE_PRODUCTVERSION 5,1,2600,2180
|
||||
#define WINE_PRODUCTVERSION_STR "5.1.2600.2180"
|
||||
#define WINE_FILEVERSION 10,0,10240,16384
|
||||
#define WINE_FILEVERSION_STR "10.0.10240.16384"
|
||||
#define WINE_PRODUCTVERSION 10,0,10240,16384
|
||||
#define WINE_PRODUCTVERSION_STR "10.0.10240.16384"
|
||||
|
||||
#include "wine/wine_common_ver.rc"
|
||||
|
|
|
@ -77,6 +77,7 @@ struct ddraw_sample
|
|||
STREAM_TIME end_time;
|
||||
BOOL continuous_update;
|
||||
CONDITION_VARIABLE update_cv;
|
||||
HANDLE external_event;
|
||||
|
||||
struct list entry;
|
||||
HRESULT update_hr;
|
||||
|
@ -91,6 +92,8 @@ static void remove_queued_update(struct ddraw_sample *sample)
|
|||
sample->busy = FALSE;
|
||||
list_remove(&sample->entry);
|
||||
WakeConditionVariable(&sample->update_cv);
|
||||
if (sample->external_event)
|
||||
SetEvent(sample->external_event);
|
||||
}
|
||||
|
||||
static void flush_update_queue(struct ddraw_stream *stream, HRESULT update_hr)
|
||||
|
@ -1583,12 +1586,6 @@ static HRESULT WINAPI ddraw_sample_Update(IDirectDrawStreamSample *iface,
|
|||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
if (event)
|
||||
{
|
||||
FIXME("Event parameter support is not implemented!\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
EnterCriticalSection(&sample->parent->cs);
|
||||
|
||||
if (sample->parent->state != State_Running)
|
||||
|
@ -1612,10 +1609,11 @@ static HRESULT WINAPI ddraw_sample_Update(IDirectDrawStreamSample *iface,
|
|||
|
||||
sample->update_hr = MS_S_NOUPDATE;
|
||||
sample->busy = TRUE;
|
||||
sample->external_event = event;
|
||||
list_add_tail(&sample->parent->update_queue, &sample->entry);
|
||||
WakeConditionVariable(&sample->parent->update_queued_cv);
|
||||
|
||||
if (flags & SSUPDATE_ASYNC)
|
||||
if ((flags & SSUPDATE_ASYNC) || event)
|
||||
{
|
||||
LeaveCriticalSection(&sample->parent->cs);
|
||||
return MS_S_PENDING;
|
||||
|
|
|
@ -466,9 +466,12 @@ static HRESULT WINAPI multimedia_stream_OpenFile(IAMMultiMediaStream *iface,
|
|||
|
||||
if (SUCCEEDED(ret = IGraphBuilder_QueryInterface(This->graph, &IID_IFilterGraph2, (void **)&graph)))
|
||||
{
|
||||
ret = IFilterGraph2_RenderEx(graph, This->ipin, AM_RENDEREX_RENDERTOEXISTINGRENDERERS, NULL);
|
||||
DWORD renderflags = (flags & AMMSF_RENDERALLSTREAMS) ? 0 : AM_RENDEREX_RENDERTOEXISTINGRENDERERS;
|
||||
|
||||
ret = IFilterGraph2_RenderEx(graph, This->ipin, renderflags, NULL);
|
||||
if (ret == VFW_E_CANNOT_RENDER) ret = VFW_E_CANNOT_CONNECT;
|
||||
else if (ret == VFW_S_PARTIAL_RENDER) ret = S_OK;
|
||||
|
||||
IFilterGraph2_Release(graph);
|
||||
}
|
||||
else
|
||||
|
|
|
@ -450,6 +450,50 @@ static void test_openfile(const WCHAR *test_avi_path)
|
|||
ref = IAMMultiMediaStream_Release(mmstream);
|
||||
ok(!ref, "Got outstanding refcount %d.\n", ref);
|
||||
|
||||
mmstream = create_ammultimediastream();
|
||||
|
||||
hr = IAMMultiMediaStream_GetFilterGraph(mmstream, &graph);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
ok(!graph, "Expected NULL graph.\n");
|
||||
|
||||
hr = IAMMultiMediaStream_GetFilter(mmstream, &filter);
|
||||
ok(!!filter, "Expected non-NULL filter.\n");
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
|
||||
check_interface(filter, &IID_IMediaSeeking, FALSE);
|
||||
|
||||
hr = IAMMultiMediaStream_OpenFile(mmstream, test_avi_path, AMMSF_RENDERALLSTREAMS);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
|
||||
check_interface(filter, &IID_IMediaSeeking, FALSE);
|
||||
|
||||
hr = IAMMultiMediaStream_GetFilterGraph(mmstream, &graph);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
ok(!!graph, "Expected non-NULL graph.\n");
|
||||
|
||||
hr = IGraphBuilder_QueryInterface(graph, &IID_IMediaFilter, (void **)&media_filter);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
|
||||
hr = IAMMultiMediaStream_SetState(mmstream, STREAMSTATE_RUN);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
|
||||
clock = NULL;
|
||||
IMediaFilter_GetSyncSource(media_filter, &clock);
|
||||
ok(!!clock, "Expected non-NULL clock.\n");
|
||||
|
||||
hr = IAMMultiMediaStream_SetState(mmstream, STREAMSTATE_STOP);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
|
||||
ref = IAMMultiMediaStream_Release(mmstream);
|
||||
ok(!ref, "Got outstanding refcount %d.\n", ref);
|
||||
IMediaFilter_Release(media_filter);
|
||||
ref = IGraphBuilder_Release(graph);
|
||||
ok(!ref, "Got outstanding refcount %d.\n", ref);
|
||||
ref = IMediaStreamFilter_Release(filter);
|
||||
ok(!ref, "Got outstanding refcount %d.\n", ref);
|
||||
ref = IReferenceClock_Release(clock);
|
||||
ok(!ref, "Got outstanding refcount %d.\n", ref);
|
||||
|
||||
mmstream = create_ammultimediastream();
|
||||
hr = IAMMultiMediaStream_GetFilterGraph(mmstream, &graph);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
|
@ -7795,6 +7839,19 @@ static void test_ddrawstreamsample_update(void)
|
|||
hr = IAMMultiMediaStream_SetState(mmstream, STREAMSTATE_RUN);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
|
||||
hr = IDirectDrawStreamSample_Update(stream_sample, 0, event, NULL, 0);
|
||||
ok(hr == MS_S_PENDING, "Got hr %#x.\n", hr);
|
||||
|
||||
ok(WaitForSingleObject(event, 0) == WAIT_TIMEOUT, "Event should not be signaled.\n");
|
||||
|
||||
media_sample = ammediastream_allocate_sample(&source, test_data, sizeof(test_data));
|
||||
hr = IMemInputPin_Receive(source.source.pMemInputPin, media_sample);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
ref = IMediaSample_Release(media_sample);
|
||||
ok(!ref, "Got outstanding refcount %d.\n", ref);
|
||||
|
||||
ok(WaitForSingleObject(event, 0) == 0, "Event should be signaled.\n");
|
||||
|
||||
hr = IDirectDrawStreamSample_Update(stream_sample, SSUPDATE_ASYNC, NULL, NULL, 0);
|
||||
ok(hr == MS_S_PENDING, "Got hr %#x.\n", hr);
|
||||
EXPECT_REF(stream_sample, 1);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
@ stub RoCaptureErrorContext
|
||||
@ stub RoFailFastWithErrorContext
|
||||
@ stub RoGetErrorReportingFlags
|
||||
@ stub RoOriginateError
|
||||
@ stdcall RoOriginateError(long ptr) combase.RoOriginateError
|
||||
@ stub RoOriginateErrorW
|
||||
@ stub RoResolveRestrictedErrorInfoReference
|
||||
@ stub RoSetErrorReportingFlags
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
@ stub RoGetMatchingRestrictedErrorInfo
|
||||
@ stub RoInspectCapturedStackBackTrace
|
||||
@ stub RoInspectThreadErrorInfo
|
||||
@ stub RoOriginateError
|
||||
@ stdcall RoOriginateError(long ptr) combase.RoOriginateError
|
||||
@ stub RoOriginateErrorW
|
||||
@ stdcall RoOriginateLanguageException(long ptr ptr) combase.RoOriginateLanguageException
|
||||
@ stub RoReportFailedDelegate
|
||||
|
|
|
@ -147,11 +147,11 @@
|
|||
@ cdecl _o___std_type_info_destroy_list(ptr) ucrtbase._o___std_type_info_destroy_list
|
||||
@ cdecl _o___std_type_info_name(ptr ptr) ucrtbase._o___std_type_info_name
|
||||
@ cdecl _o___stdio_common_vfprintf(int64 ptr str ptr ptr) ucrtbase._o___stdio_common_vfprintf
|
||||
@ stub _o___stdio_common_vfprintf_p
|
||||
@ cdecl _o___stdio_common_vfprintf_p(int64 ptr str ptr ptr) ucrtbase._o___stdio_common_vfprintf_p
|
||||
@ cdecl _o___stdio_common_vfprintf_s(int64 ptr str ptr ptr) ucrtbase._o___stdio_common_vfprintf_s
|
||||
@ cdecl _o___stdio_common_vfscanf(int64 ptr str ptr ptr) ucrtbase._o___stdio_common_vfscanf
|
||||
@ cdecl _o___stdio_common_vfwprintf(int64 ptr wstr ptr ptr) ucrtbase._o___stdio_common_vfwprintf
|
||||
@ stub _o___stdio_common_vfwprintf_p
|
||||
@ cdecl _o___stdio_common_vfwprintf_p(int64 ptr wstr ptr ptr) ucrtbase._o___stdio_common_vfwprintf_p
|
||||
@ cdecl _o___stdio_common_vfwprintf_s(int64 ptr wstr ptr ptr) ucrtbase._o___stdio_common_vfwprintf_s
|
||||
@ cdecl _o___stdio_common_vfwscanf(int64 ptr wstr ptr ptr) ucrtbase._o___stdio_common_vfwscanf
|
||||
@ cdecl _o___stdio_common_vsnprintf_s(int64 ptr long long str ptr ptr) ucrtbase._o___stdio_common_vsnprintf_s
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
@ cdecl __p__commode() ucrtbase.__p__commode
|
||||
@ cdecl __p__fmode() ucrtbase.__p__fmode
|
||||
@ cdecl __stdio_common_vfprintf(int64 ptr str ptr ptr) ucrtbase.__stdio_common_vfprintf
|
||||
@ stub __stdio_common_vfprintf_p
|
||||
@ cdecl __stdio_common_vfprintf_p(int64 ptr str ptr ptr) ucrtbase.__stdio_common_vfprintf_p
|
||||
@ cdecl __stdio_common_vfprintf_s(int64 ptr str ptr ptr) ucrtbase.__stdio_common_vfprintf_s
|
||||
@ cdecl __stdio_common_vfscanf(int64 ptr str ptr ptr) ucrtbase.__stdio_common_vfscanf
|
||||
@ cdecl __stdio_common_vfwprintf(int64 ptr wstr ptr ptr) ucrtbase.__stdio_common_vfwprintf
|
||||
@ stub __stdio_common_vfwprintf_p
|
||||
@ cdecl __stdio_common_vfwprintf_p(int64 ptr wstr ptr ptr) ucrtbase.__stdio_common_vfwprintf_p
|
||||
@ cdecl __stdio_common_vfwprintf_s(int64 ptr wstr ptr ptr) ucrtbase.__stdio_common_vfwprintf_s
|
||||
@ cdecl __stdio_common_vfwscanf(int64 ptr wstr ptr ptr) ucrtbase.__stdio_common_vfwscanf
|
||||
@ cdecl __stdio_common_vsnprintf_s(int64 ptr long long str ptr ptr) ucrtbase.__stdio_common_vsnprintf_s
|
||||
|
|
|
@ -1404,22 +1404,52 @@ HRESULT WINAPI AtlAxGetControl(HWND hWnd, IUnknown **pUnk)
|
|||
* AtlAxDialogBoxW [atl100.35]
|
||||
*
|
||||
*/
|
||||
INT_PTR WINAPI AtlAxDialogBoxW(HINSTANCE hInstance, LPCWSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogProc,
|
||||
LPARAM dwInitParam)
|
||||
INT_PTR WINAPI AtlAxDialogBoxW(HINSTANCE instance, const WCHAR *name,
|
||||
HWND owner, DLGPROC proc, LPARAM param)
|
||||
{
|
||||
FIXME("(%p %s %p %p %lx)\n", hInstance, debugstr_w(lpTemplateName), hWndParent, lpDialogProc, dwInitParam);
|
||||
return 0;
|
||||
HRSRC resource;
|
||||
HGLOBAL global;
|
||||
DLGTEMPLATE *template;
|
||||
INT_PTR ret;
|
||||
|
||||
TRACE("instance %p, name %s, owner %p, proc %p, param %#Ix\n",
|
||||
instance, debugstr_w(name), owner, proc, param);
|
||||
|
||||
if (!(resource = FindResourceW(instance, name, (const WCHAR *)RT_DIALOG)))
|
||||
return 0;
|
||||
|
||||
if (!(global = LoadResource(instance, resource)))
|
||||
return 0;
|
||||
|
||||
if (!(template = AX_ConvertDialogTemplate(LockResource(global))))
|
||||
return 0;
|
||||
|
||||
ret = DialogBoxIndirectParamW(instance, template, owner, proc, param);
|
||||
HeapFree(GetProcessHeap(), 0, template);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* AtlAxDialogBoxA [atl100.36]
|
||||
*
|
||||
*/
|
||||
INT_PTR WINAPI AtlAxDialogBoxA(HINSTANCE hInstance, LPCSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogProc,
|
||||
LPARAM dwInitParam)
|
||||
INT_PTR WINAPI AtlAxDialogBoxA(HINSTANCE instance, const char *name,
|
||||
HWND owner, DLGPROC proc, LPARAM param)
|
||||
{
|
||||
FIXME("(%p %s %p %p %lx)\n", hInstance, debugstr_a(lpTemplateName), hWndParent, lpDialogProc, dwInitParam);
|
||||
return 0;
|
||||
WCHAR *nameW;
|
||||
int len;
|
||||
INT_PTR ret;
|
||||
|
||||
if (IS_INTRESOURCE(name))
|
||||
return AtlAxDialogBoxW(instance, (const WCHAR *)name, owner, proc, param);
|
||||
|
||||
len = MultiByteToWideChar(CP_ACP, 0, name, -1, NULL, 0);
|
||||
if (!(nameW = malloc(len * sizeof(WCHAR))))
|
||||
return 0;
|
||||
MultiByteToWideChar(CP_ACP, 0, name, -1, nameW, len);
|
||||
ret = AtlAxDialogBoxW(instance, nameW, owner, proc, param);
|
||||
free(nameW);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
|
|
@ -301,7 +301,7 @@
|
|||
@ stdcall RoInitialize(long)
|
||||
@ stub RoInspectCapturedStackBackTrace
|
||||
@ stub RoInspectThreadErrorInfo
|
||||
@ stub RoOriginateError
|
||||
@ stdcall RoOriginateError(long ptr)
|
||||
@ stub RoOriginateErrorW
|
||||
@ stdcall RoOriginateLanguageException(long ptr ptr)
|
||||
@ stub RoParameterizedTypeExtraGetTypeSignature
|
||||
|
@ -312,7 +312,7 @@
|
|||
@ stub RoReportUnhandledError
|
||||
@ stub RoResolveRestrictedErrorInfoReference
|
||||
@ stub RoRevokeActivationFactories
|
||||
@ stub RoSetErrorReportingFlags
|
||||
@ stdcall RoSetErrorReportingFlags(long)
|
||||
@ stub RoTransformError
|
||||
@ stub RoTransformErrorW
|
||||
@ stdcall RoUninitialize()
|
||||
|
|
|
@ -290,6 +290,24 @@ BOOL WINAPI RoOriginateLanguageException(HRESULT error, HSTRING message, IUnknow
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* RoOriginateError (combase.@)
|
||||
*/
|
||||
BOOL WINAPI RoOriginateError(HRESULT error, HSTRING message)
|
||||
{
|
||||
FIXME("(%x %s) stub\n", error, debugstr_hstring(message));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* RoSetErrorReportingFlags (combase.@)
|
||||
*/
|
||||
HRESULT WINAPI RoSetErrorReportingFlags(UINT32 flags)
|
||||
{
|
||||
FIXME("(%08x): stub\n", flags);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* CleanupTlsOleState (combase.@)
|
||||
*/
|
||||
|
|
|
@ -1125,7 +1125,10 @@ static void BUTTON_PositionRect(LONG style, const RECT *outerRect, RECT *innerRe
|
|||
switch (style & BS_CENTER)
|
||||
{
|
||||
case BS_CENTER:
|
||||
innerRect->left = outerRect->left + (outerRect->right - outerRect->left - width) / 2;
|
||||
/* The left and right margins are added to the inner rectangle to get a new rectangle. Then
|
||||
* the new rectangle is adjusted to be in the horizontal center */
|
||||
innerRect->left = outerRect->left + (outerRect->right - outerRect->left - width
|
||||
+ margin->left - margin->right) / 2;
|
||||
innerRect->right = innerRect->left + width;
|
||||
break;
|
||||
case BS_RIGHT:
|
||||
|
@ -1151,7 +1154,10 @@ static void BUTTON_PositionRect(LONG style, const RECT *outerRect, RECT *innerRe
|
|||
break;
|
||||
case BS_VCENTER:
|
||||
default:
|
||||
innerRect->top = outerRect->top + (outerRect->bottom - outerRect->top - height) / 2;
|
||||
/* The top and bottom margins are added to the inner rectangle to get a new rectangle. Then
|
||||
* the new rectangle is adjusted to be in the vertical center */
|
||||
innerRect->top = outerRect->top + (outerRect->bottom - outerRect->top - height
|
||||
+ margin->top - margin->bottom) / 2;
|
||||
innerRect->bottom = innerRect->top + height;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1001,8 +1001,7 @@ static void CBDropDown( LPHEADCOMBO lphc )
|
|||
|
||||
|
||||
if( !(lphc->wState & CBF_NOREDRAW) )
|
||||
RedrawWindow( lphc->self, NULL, 0, RDW_INVALIDATE |
|
||||
RDW_ERASE | RDW_UPDATENOW | RDW_NOCHILDREN );
|
||||
RedrawWindow( lphc->self, NULL, 0, RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW );
|
||||
|
||||
EnableWindow( lphc->hWndLBox, TRUE );
|
||||
if (GetCapture() != lphc->self)
|
||||
|
|
|
@ -1033,6 +1033,7 @@ DATETIME_Button_Command (DATETIME_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
|
|||
DWORD state = SendMessageW((HWND)lParam, BM_GETCHECK, 0, 0);
|
||||
infoPtr->dateValid = (state == BST_CHECKED);
|
||||
InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
|
||||
DATETIME_SendDateTimeChangeNotify(infoPtr);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -4798,6 +4798,7 @@ static BOOL LISTVIEW_DrawItem(LISTVIEW_INFO *infoPtr, HDC hdc, INT nItem, ITERAT
|
|||
lvItem.lParam = 0;
|
||||
lvItem.cchTextMax = DISP_TEXT_SIZE;
|
||||
lvItem.pszText = szDispText;
|
||||
szDispText[0] = 0;
|
||||
if (!LISTVIEW_GetItemW(infoPtr, &lvItem)) return FALSE;
|
||||
if (infoPtr->dwLvExStyle & LVS_EX_FULLROWSELECT)
|
||||
lvItem.state = LISTVIEW_GetItemState(infoPtr, nItem, LVIS_SELECTED);
|
||||
|
|
|
@ -1799,6 +1799,7 @@ MONTHCAL_HitTest(const MONTHCAL_INFO *infoPtr, MCHITTESTINFO *lpht)
|
|||
if(!lpht || lpht->cbSize < MCHITTESTINFO_V1_SIZE) return -1;
|
||||
|
||||
htinfo.st = st_null;
|
||||
htinfo.uHit = 0;
|
||||
|
||||
/* we should preserve passed fields if hit area doesn't need them */
|
||||
if (lpht->cbSize == sizeof(MCHITTESTINFO))
|
||||
|
|
|
@ -1,219 +1,327 @@
|
|||
@ cdecl -arch=arm ??0?$_SpinWait@$00@details@Concurrency@@QAA@P6AXXZ@Z(ptr ptr) msvcr120.??0?$_SpinWait@$00@details@Concurrency@@QAA@P6AXXZ@Z
|
||||
@ thiscall -arch=i386 ??0?$_SpinWait@$00@details@Concurrency@@QAE@P6AXXZ@Z(ptr ptr) msvcr120.??0?$_SpinWait@$00@details@Concurrency@@QAE@P6AXXZ@Z
|
||||
@ cdecl -arch=win64 ??0?$_SpinWait@$00@details@Concurrency@@QEAA@P6AXXZ@Z(ptr ptr) msvcr120.??0?$_SpinWait@$00@details@Concurrency@@QEAA@P6AXXZ@Z
|
||||
@ cdecl -arch=arm ??0?$_SpinWait@$0A@@details@Concurrency@@QAA@P6AXXZ@Z(ptr ptr) msvcr120.??0?$_SpinWait@$0A@@details@Concurrency@@QAA@P6AXXZ@Z
|
||||
@ thiscall -arch=i386 ??0?$_SpinWait@$0A@@details@Concurrency@@QAE@P6AXXZ@Z(ptr ptr) msvcr120.??0?$_SpinWait@$0A@@details@Concurrency@@QAE@P6AXXZ@Z
|
||||
@ cdecl -arch=win64 ??0?$_SpinWait@$0A@@details@Concurrency@@QEAA@P6AXXZ@Z(ptr ptr) msvcr120.??0?$_SpinWait@$0A@@details@Concurrency@@QEAA@P6AXXZ@Z
|
||||
@ varargs -arch=win32 ??0SchedulerPolicy@Concurrency@@QAA@IZZ(ptr long) msvcr120.??0SchedulerPolicy@Concurrency@@QAA@IZZ
|
||||
@ cdecl -arch=win64 ??0SchedulerPolicy@Concurrency@@QEAA@AEBV01@@Z(ptr ptr) msvcr120.??0SchedulerPolicy@Concurrency@@QEAA@AEBV01@@Z
|
||||
@ cdecl -arch=arm ??0SchedulerPolicy@Concurrency@@QAA@ABV01@@Z(ptr ptr) msvcr120.??0SchedulerPolicy@Concurrency@@QAA@ABV01@@Z
|
||||
@ thiscall -arch=i386 ??0SchedulerPolicy@Concurrency@@QAE@ABV01@@Z(ptr ptr) msvcr120.??0SchedulerPolicy@Concurrency@@QAE@ABV01@@Z
|
||||
@ cdecl -arch=win64 ??0SchedulerPolicy@Concurrency@@QEAA@XZ(ptr) msvcr120.??0SchedulerPolicy@Concurrency@@QEAA@XZ
|
||||
@ cdecl -arch=arm ??0SchedulerPolicy@Concurrency@@QAA@XZ(ptr) msvcr120.??0SchedulerPolicy@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??0SchedulerPolicy@Concurrency@@QAE@XZ(ptr) msvcr120.??0SchedulerPolicy@Concurrency@@QAE@XZ
|
||||
@ varargs -arch=win64 ??0SchedulerPolicy@Concurrency@@QEAA@_KZZ(ptr long) msvcr120.??0SchedulerPolicy@Concurrency@@QEAA@_KZZ
|
||||
@ stub -arch=arm ??0_Cancellation_beacon@details@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??0_Cancellation_beacon@details@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??0_Cancellation_beacon@details@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=arm ??0_Concurrent_queue_base_v4@details@Concurrency@@IAA@I@Z
|
||||
@ thiscall -arch=i386 ??0_Concurrent_queue_base_v4@details@Concurrency@@IAE@I@Z(ptr long) msvcp120.??0_Concurrent_queue_base_v4@details@Concurrency@@IAE@I@Z
|
||||
@ cdecl -arch=win64 ??0_Concurrent_queue_base_v4@details@Concurrency@@IEAA@_K@Z(ptr long) msvcp120.??0_Concurrent_queue_base_v4@details@Concurrency@@IEAA@_K@Z
|
||||
@ stub -arch=arm ??0_Concurrent_queue_iterator_base_v4@details@Concurrency@@IAA@ABV_Concurrent_queue_base_v4@12@@Z
|
||||
@ stub -arch=i386 ??0_Concurrent_queue_iterator_base_v4@details@Concurrency@@IAE@ABV_Concurrent_queue_base_v4@12@@Z
|
||||
@ stub -arch=win64 ??0_Concurrent_queue_iterator_base_v4@details@Concurrency@@IEAA@AEBV_Concurrent_queue_base_v4@12@@Z
|
||||
@ cdecl -arch=arm ??0_Condition_variable@details@Concurrency@@QAA@XZ(ptr) msvcr120.??0_Condition_variable@details@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??0_Condition_variable@details@Concurrency@@QAE@XZ(ptr) msvcr120.??0_Condition_variable@details@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??0_Condition_variable@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??0_Condition_variable@details@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=arm ??0_Context@details@Concurrency@@QAA@PAVContext@2@@Z
|
||||
@ stub -arch=i386 ??0_Context@details@Concurrency@@QAE@PAVContext@2@@Z
|
||||
@ stub -arch=win64 ??0_Context@details@Concurrency@@QEAA@PEAVContext@2@@Z
|
||||
@ cdecl -arch=arm ??0_NonReentrantBlockingLock@details@Concurrency@@QAA@XZ(ptr) msvcr120.??0_NonReentrantBlockingLock@details@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??0_NonReentrantBlockingLock@details@Concurrency@@QAE@XZ(ptr) msvcr120.??0_NonReentrantBlockingLock@details@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??0_NonReentrantBlockingLock@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??0_NonReentrantBlockingLock@details@Concurrency@@QEAA@XZ
|
||||
@ cdecl -arch=arm ??0_NonReentrantPPLLock@details@Concurrency@@QAA@XZ(ptr) msvcr120.??0_NonReentrantPPLLock@details@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??0_NonReentrantPPLLock@details@Concurrency@@QAE@XZ(ptr) msvcr120.??0_NonReentrantPPLLock@details@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??0_NonReentrantPPLLock@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??0_NonReentrantPPLLock@details@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=arm ??0_ReaderWriterLock@details@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??0_ReaderWriterLock@details@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??0_ReaderWriterLock@details@Concurrency@@QEAA@XZ
|
||||
@ cdecl -arch=arm ??0_ReentrantBlockingLock@details@Concurrency@@QAA@XZ(ptr) msvcr120.??0_ReentrantBlockingLock@details@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??0_ReentrantBlockingLock@details@Concurrency@@QAE@XZ(ptr) msvcr120.??0_ReentrantBlockingLock@details@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??0_ReentrantBlockingLock@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??0_ReentrantBlockingLock@details@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=arm ??0_ReentrantLock@details@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??0_ReentrantLock@details@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??0_ReentrantLock@details@Concurrency@@QEAA@XZ
|
||||
@ cdecl -arch=arm ??0_ReentrantPPLLock@details@Concurrency@@QAA@XZ(ptr) msvcr120.??0_ReentrantPPLLock@details@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??0_ReentrantPPLLock@details@Concurrency@@QAE@XZ(ptr) msvcr120.??0_ReentrantPPLLock@details@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??0_ReentrantPPLLock@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??0_ReentrantPPLLock@details@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=arm ??0_Runtime_object@details@Concurrency@@QAA@H@Z
|
||||
@ thiscall -arch=i386 ??0_Runtime_object@details@Concurrency@@QAE@H@Z(ptr long) msvcp120.??0_Runtime_object@details@Concurrency@@QAE@H@Z
|
||||
@ cdecl -arch=win64 ??0_Runtime_object@details@Concurrency@@QEAA@H@Z(ptr long) msvcp120.??0_Runtime_object@details@Concurrency@@QEAA@H@Z
|
||||
@ stub -arch=arm ??0_Runtime_object@details@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??0_Runtime_object@details@Concurrency@@QAE@XZ(ptr) msvcp120.??0_Runtime_object@details@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??0_Runtime_object@details@Concurrency@@QEAA@XZ(ptr) msvcp120.??0_Runtime_object@details@Concurrency@@QEAA@XZ
|
||||
@ cdecl -arch=arm ??0_Scheduler@details@Concurrency@@QAA@PAVScheduler@2@@Z(ptr ptr) msvcr120.??0_Scheduler@details@Concurrency@@QAA@PAVScheduler@2@@Z
|
||||
@ thiscall -arch=i386 ??0_Scheduler@details@Concurrency@@QAE@PAVScheduler@2@@Z(ptr ptr) msvcr120.??0_Scheduler@details@Concurrency@@QAE@PAVScheduler@2@@Z
|
||||
@ cdecl -arch=win64 ??0_Scheduler@details@Concurrency@@QEAA@PEAVScheduler@2@@Z(ptr ptr) msvcr120.??0_Scheduler@details@Concurrency@@QEAA@PEAVScheduler@2@@Z
|
||||
@ cdecl -arch=arm ??0_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QAA@AAV123@@Z(ptr ptr) msvcr120.??0_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QAA@AAV123@@Z
|
||||
@ thiscall -arch=i386 ??0_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QAE@AAV123@@Z(ptr ptr) msvcr120.??0_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QAE@AAV123@@Z
|
||||
@ cdecl -arch=win64 ??0_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QEAA@AEAV123@@Z(ptr ptr) msvcr120.??0_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QEAA@AEAV123@@Z
|
||||
@ cdecl -arch=arm ??0_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QAA@AAV123@@Z(ptr ptr) msvcr120.??0_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QAA@AAV123@@Z
|
||||
@ thiscall -arch=i386 ??0_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QAE@AAV123@@Z(ptr ptr) msvcr120.??0_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QAE@AAV123@@Z
|
||||
@ cdecl -arch=win64 ??0_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QEAA@AEAV123@@Z(ptr ptr) msvcr120.??0_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QEAA@AEAV123@@Z
|
||||
@ stub -arch=arm ??0_SpinLock@details@Concurrency@@QAA@ACJ@Z
|
||||
@ stub -arch=i386 ??0_SpinLock@details@Concurrency@@QAE@ACJ@Z
|
||||
@ stub -arch=win64 ??0_SpinLock@details@Concurrency@@QEAA@AECJ@Z
|
||||
@ stub -arch=arm ??0_StructuredTaskCollection@details@Concurrency@@QAA@PAV_CancellationTokenState@12@@Z
|
||||
@ stub -arch=i386 ??0_StructuredTaskCollection@details@Concurrency@@QAE@PAV_CancellationTokenState@12@@Z
|
||||
@ stub -arch=win64 ??0_StructuredTaskCollection@details@Concurrency@@QEAA@PEAV_CancellationTokenState@12@@Z
|
||||
@ stub -arch=arm ??0_TaskCollection@details@Concurrency@@QAA@PAV_CancellationTokenState@12@@Z
|
||||
@ stub -arch=i386 ??0_TaskCollection@details@Concurrency@@QAE@PAV_CancellationTokenState@12@@Z
|
||||
@ stub -arch=win64 ??0_TaskCollection@details@Concurrency@@QEAA@PEAV_CancellationTokenState@12@@Z
|
||||
@ stub -arch=arm ??0_TaskCollection@details@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??0_TaskCollection@details@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??0_TaskCollection@details@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=arm ??0_Timer@details@Concurrency@@IAA@I_N@Z
|
||||
@ stub -arch=i386 ??0_Timer@details@Concurrency@@IAE@I_N@Z
|
||||
@ stub -arch=win64 ??0_Timer@details@Concurrency@@IEAA@I_N@Z
|
||||
@ stub -arch=arm ??0agent@Concurrency@@QAA@AAVScheduleGroup@1@@Z
|
||||
@ stub -arch=i386 ??0agent@Concurrency@@QAE@AAVScheduleGroup@1@@Z
|
||||
@ stub -arch=win64 ??0agent@Concurrency@@QEAA@AEAVScheduleGroup@1@@Z
|
||||
@ stub -arch=arm ??0agent@Concurrency@@QAA@AAVScheduler@1@@Z
|
||||
@ stub -arch=i386 ??0agent@Concurrency@@QAE@AAVScheduler@1@@Z
|
||||
@ stub -arch=win64 ??0agent@Concurrency@@QEAA@AEAVScheduler@1@@Z
|
||||
@ stub -arch=arm ??0agent@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??0agent@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??0agent@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=arm ??0bad_target@Concurrency@@QAA@PBD@Z
|
||||
@ stub -arch=i386 ??0bad_target@Concurrency@@QAE@PBD@Z
|
||||
@ stub -arch=win64 ??0bad_target@Concurrency@@QEAA@PEBD@Z
|
||||
@ stub -arch=arm ??0bad_target@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??0bad_target@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??0bad_target@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=arm ??0context_self_unblock@Concurrency@@QAA@PBD@Z
|
||||
@ stub -arch=i386 ??0context_self_unblock@Concurrency@@QAE@PBD@Z
|
||||
@ stub -arch=win64 ??0context_self_unblock@Concurrency@@QEAA@PEBD@Z
|
||||
@ stub -arch=arm ??0context_self_unblock@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??0context_self_unblock@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??0context_self_unblock@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=arm ??0context_unblock_unbalanced@Concurrency@@QAA@PBD@Z
|
||||
@ stub -arch=i386 ??0context_unblock_unbalanced@Concurrency@@QAE@PBD@Z
|
||||
@ stub -arch=win64 ??0context_unblock_unbalanced@Concurrency@@QEAA@PEBD@Z
|
||||
@ stub -arch=arm ??0context_unblock_unbalanced@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??0context_unblock_unbalanced@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??0context_unblock_unbalanced@Concurrency@@QEAA@XZ
|
||||
@ cdecl -arch=arm ??0critical_section@Concurrency@@QAA@XZ(ptr) msvcr120.??0critical_section@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??0critical_section@Concurrency@@QAE@XZ(ptr) msvcr120.??0critical_section@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??0critical_section@Concurrency@@QEAA@XZ(ptr) msvcr120.??0critical_section@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=arm ??0default_scheduler_exists@Concurrency@@QAA@PBD@Z
|
||||
@ stub -arch=i386 ??0default_scheduler_exists@Concurrency@@QAE@PBD@Z
|
||||
@ stub -arch=win64 ??0default_scheduler_exists@Concurrency@@QEAA@PEBD@Z
|
||||
@ stub -arch=arm ??0default_scheduler_exists@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??0default_scheduler_exists@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??0default_scheduler_exists@Concurrency@@QEAA@XZ
|
||||
@ thiscall -arch=win32 ??0event@Concurrency@@QAE@XZ(ptr) msvcr120.??0event@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=arm ??0event@Concurrency@@QAA@XZ(ptr) msvcr120.??0event@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??0event@Concurrency@@QAE@XZ(ptr) msvcr120.??0event@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??0event@Concurrency@@QEAA@XZ(ptr) msvcr120.??0event@Concurrency@@QEAA@XZ
|
||||
@ cdecl -arch=arm ??0improper_lock@Concurrency@@QAA@PBD@Z(ptr str) msvcr120.??0improper_lock@Concurrency@@QAA@PBD@Z
|
||||
@ thiscall -arch=i386 ??0improper_lock@Concurrency@@QAE@PBD@Z(ptr str) msvcr120.??0improper_lock@Concurrency@@QAE@PBD@Z
|
||||
@ cdecl -arch=win64 ??0improper_lock@Concurrency@@QEAA@PEBD@Z(ptr str) msvcr120.??0improper_lock@Concurrency@@QEAA@PEBD@Z
|
||||
@ cdecl -arch=arm ??0improper_lock@Concurrency@@QAA@XZ(ptr) msvcr120.??0improper_lock@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??0improper_lock@Concurrency@@QAE@XZ(ptr) msvcr120.??0improper_lock@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??0improper_lock@Concurrency@@QEAA@XZ(ptr) msvcr120.??0improper_lock@Concurrency@@QEAA@XZ
|
||||
@ cdecl -arch=arm ??0improper_scheduler_attach@Concurrency@@QAA@PBD@Z(ptr str) msvcr120.??0improper_scheduler_attach@Concurrency@@QAA@PBD@Z
|
||||
@ thiscall -arch=i386 ??0improper_scheduler_attach@Concurrency@@QAE@PBD@Z(ptr str) msvcr120.??0improper_scheduler_attach@Concurrency@@QAE@PBD@Z
|
||||
@ cdecl -arch=win64 ??0improper_scheduler_attach@Concurrency@@QEAA@PEBD@Z(ptr str) msvcr120.??0improper_scheduler_attach@Concurrency@@QEAA@PEBD@Z
|
||||
@ cdecl -arch=arm ??0improper_scheduler_attach@Concurrency@@QAA@XZ(ptr) msvcr120.??0improper_scheduler_attach@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??0improper_scheduler_attach@Concurrency@@QAE@XZ(ptr) msvcr120.??0improper_scheduler_attach@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??0improper_scheduler_attach@Concurrency@@QEAA@XZ(ptr) msvcr120.??0improper_scheduler_attach@Concurrency@@QEAA@XZ
|
||||
@ cdecl -arch=arm ??0improper_scheduler_detach@Concurrency@@QAA@PBD@Z(ptr str) msvcr120.??0improper_scheduler_detach@Concurrency@@QAA@PBD@Z
|
||||
@ thiscall -arch=i386 ??0improper_scheduler_detach@Concurrency@@QAE@PBD@Z(ptr str) msvcr120.??0improper_scheduler_detach@Concurrency@@QAE@PBD@Z
|
||||
@ cdecl -arch=win64 ??0improper_scheduler_detach@Concurrency@@QEAA@PEBD@Z(ptr str) msvcr120.??0improper_scheduler_detach@Concurrency@@QEAA@PEBD@Z
|
||||
@ cdecl -arch=arm ??0improper_scheduler_detach@Concurrency@@QAA@XZ(ptr) msvcr120.??0improper_scheduler_detach@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??0improper_scheduler_detach@Concurrency@@QAE@XZ(ptr) msvcr120.??0improper_scheduler_detach@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??0improper_scheduler_detach@Concurrency@@QEAA@XZ(ptr) msvcr120.??0improper_scheduler_detach@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=arm ??0improper_scheduler_reference@Concurrency@@QAA@PBD@Z
|
||||
@ stub -arch=i386 ??0improper_scheduler_reference@Concurrency@@QAE@PBD@Z
|
||||
@ stub -arch=win64 ??0improper_scheduler_reference@Concurrency@@QEAA@PEBD@Z
|
||||
@ stub -arch=arm ??0improper_scheduler_reference@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??0improper_scheduler_reference@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??0improper_scheduler_reference@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=arm ??0invalid_link_target@Concurrency@@QAA@PBD@Z
|
||||
@ stub -arch=i386 ??0invalid_link_target@Concurrency@@QAE@PBD@Z
|
||||
@ stub -arch=win64 ??0invalid_link_target@Concurrency@@QEAA@PEBD@Z
|
||||
@ stub -arch=arm ??0invalid_link_target@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??0invalid_link_target@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??0invalid_link_target@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@PBD@Z
|
||||
@ stub -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z
|
||||
@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z
|
||||
@ stub -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=arm ??0invalid_oversubscribe_operation@Concurrency@@QAA@PBD@Z
|
||||
@ stub -arch=i386 ??0invalid_oversubscribe_operation@Concurrency@@QAE@PBD@Z
|
||||
@ stub -arch=win64 ??0invalid_oversubscribe_operation@Concurrency@@QEAA@PEBD@Z
|
||||
@ stub -arch=arm ??0invalid_oversubscribe_operation@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??0invalid_oversubscribe_operation@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??0invalid_oversubscribe_operation@Concurrency@@QEAA@XZ
|
||||
@ cdecl -arch=arm ??0invalid_scheduler_policy_key@Concurrency@@QAA@PBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QAA@PBD@Z
|
||||
@ thiscall -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@PBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QAE@PBD@Z
|
||||
@ cdecl -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@PEBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QEAA@PEBD@Z
|
||||
@ cdecl -arch=arm ??0invalid_scheduler_policy_key@Concurrency@@QAA@XZ(ptr) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@XZ(ptr) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@XZ(ptr) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QEAA@XZ
|
||||
@ cdecl -arch=arm ??0invalid_scheduler_policy_thread_specification@Concurrency@@QAA@PBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_thread_specification@Concurrency@@QAA@PBD@Z
|
||||
@ thiscall -arch=i386 ??0invalid_scheduler_policy_thread_specification@Concurrency@@QAE@PBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_thread_specification@Concurrency@@QAE@PBD@Z
|
||||
@ cdecl -arch=win64 ??0invalid_scheduler_policy_thread_specification@Concurrency@@QEAA@PEBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_thread_specification@Concurrency@@QEAA@PEBD@Z
|
||||
@ cdecl -arch=arm ??0invalid_scheduler_policy_thread_specification@Concurrency@@QAA@XZ(ptr) msvcr120.??0invalid_scheduler_policy_thread_specification@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??0invalid_scheduler_policy_thread_specification@Concurrency@@QAE@XZ(ptr) msvcr120.??0invalid_scheduler_policy_thread_specification@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??0invalid_scheduler_policy_thread_specification@Concurrency@@QEAA@XZ(ptr) msvcr120.??0invalid_scheduler_policy_thread_specification@Concurrency@@QEAA@XZ
|
||||
@ cdecl -arch=arm ??0invalid_scheduler_policy_value@Concurrency@@QAA@PBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_value@Concurrency@@QAA@PBD@Z
|
||||
@ thiscall -arch=i386 ??0invalid_scheduler_policy_value@Concurrency@@QAE@PBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_value@Concurrency@@QAE@PBD@Z
|
||||
@ cdecl -arch=win64 ??0invalid_scheduler_policy_value@Concurrency@@QEAA@PEBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_value@Concurrency@@QEAA@PEBD@Z
|
||||
@ cdecl -arch=arm ??0invalid_scheduler_policy_value@Concurrency@@QAA@XZ(ptr) msvcr120.??0invalid_scheduler_policy_value@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??0invalid_scheduler_policy_value@Concurrency@@QAE@XZ(ptr) msvcr120.??0invalid_scheduler_policy_value@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??0invalid_scheduler_policy_value@Concurrency@@QEAA@XZ(ptr) msvcr120.??0invalid_scheduler_policy_value@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=win32 ??0message_not_found@Concurrency@@QAE@PBD@Z
|
||||
@ stub -arch=arm ??0message_not_found@Concurrency@@QAA@PBD@Z
|
||||
@ stub -arch=i386 ??0message_not_found@Concurrency@@QAE@PBD@Z
|
||||
@ stub -arch=win64 ??0message_not_found@Concurrency@@QEAA@PEBD@Z
|
||||
@ stub -arch=win32 ??0message_not_found@Concurrency@@QAE@XZ
|
||||
@ stub -arch=arm ??0message_not_found@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??0message_not_found@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??0message_not_found@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=win32 ??0missing_wait@Concurrency@@QAE@PBD@Z
|
||||
@ stub -arch=arm ??0missing_wait@Concurrency@@QAA@PBD@Z
|
||||
@ stub -arch=i386 ??0missing_wait@Concurrency@@QAE@PBD@Z
|
||||
@ stub -arch=win64 ??0missing_wait@Concurrency@@QEAA@PEBD@Z
|
||||
@ stub -arch=win32 ??0missing_wait@Concurrency@@QAE@XZ
|
||||
@ stub -arch=arm ??0missing_wait@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??0missing_wait@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??0missing_wait@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=win32 ??0nested_scheduler_missing_detach@Concurrency@@QAE@PBD@Z
|
||||
@ stub -arch=arm ??0nested_scheduler_missing_detach@Concurrency@@QAA@PBD@Z
|
||||
@ stub -arch=i386 ??0nested_scheduler_missing_detach@Concurrency@@QAE@PBD@Z
|
||||
@ stub -arch=win64 ??0nested_scheduler_missing_detach@Concurrency@@QEAA@PEBD@Z
|
||||
@ stub -arch=win32 ??0nested_scheduler_missing_detach@Concurrency@@QAE@XZ
|
||||
@ stub -arch=arm ??0nested_scheduler_missing_detach@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??0nested_scheduler_missing_detach@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??0nested_scheduler_missing_detach@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=win32 ??0operation_timed_out@Concurrency@@QAE@PBD@Z
|
||||
@ stub -arch=arm ??0operation_timed_out@Concurrency@@QAA@PBD@Z
|
||||
@ stub -arch=i386 ??0operation_timed_out@Concurrency@@QAE@PBD@Z
|
||||
@ stub -arch=win64 ??0operation_timed_out@Concurrency@@QEAA@PEBD@Z
|
||||
@ stub -arch=win32 ??0operation_timed_out@Concurrency@@QAE@XZ
|
||||
@ stub -arch=arm ??0operation_timed_out@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??0operation_timed_out@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??0operation_timed_out@Concurrency@@QEAA@XZ
|
||||
@ thiscall -arch=win32 ??0reader_writer_lock@Concurrency@@QAE@XZ(ptr) msvcr120.??0reader_writer_lock@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=arm ??0reader_writer_lock@Concurrency@@QAA@XZ(ptr) msvcr120.??0reader_writer_lock@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??0reader_writer_lock@Concurrency@@QAE@XZ(ptr) msvcr120.??0reader_writer_lock@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??0reader_writer_lock@Concurrency@@QEAA@XZ(ptr) msvcr120.??0reader_writer_lock@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=win32 ??0scheduler_not_attached@Concurrency@@QAE@PBD@Z
|
||||
@ stub -arch=arm ??0scheduler_not_attached@Concurrency@@QAA@PBD@Z
|
||||
@ stub -arch=i386 ??0scheduler_not_attached@Concurrency@@QAE@PBD@Z
|
||||
@ stub -arch=win64 ??0scheduler_not_attached@Concurrency@@QEAA@PEBD@Z
|
||||
@ stub -arch=win32 ??0scheduler_not_attached@Concurrency@@QAE@XZ
|
||||
@ stub -arch=arm ??0scheduler_not_attached@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??0scheduler_not_attached@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??0scheduler_not_attached@Concurrency@@QEAA@XZ
|
||||
@ cdecl -arch=arm ??0scheduler_resource_allocation_error@Concurrency@@QAA@J@Z(ptr long) msvcr120.??0scheduler_resource_allocation_error@Concurrency@@QAA@J@Z
|
||||
@ thiscall -arch=i386 ??0scheduler_resource_allocation_error@Concurrency@@QAE@J@Z(ptr long) msvcr120.??0scheduler_resource_allocation_error@Concurrency@@QAE@J@Z
|
||||
@ cdecl -arch=win64 ??0scheduler_resource_allocation_error@Concurrency@@QEAA@J@Z(ptr long) msvcr120.??0scheduler_resource_allocation_error@Concurrency@@QEAA@J@Z
|
||||
@ cdecl -arch=arm ??0scheduler_resource_allocation_error@Concurrency@@QAA@PBDJ@Z(ptr str long) msvcr120.??0scheduler_resource_allocation_error@Concurrency@@QAA@PBDJ@Z
|
||||
@ thiscall -arch=i386 ??0scheduler_resource_allocation_error@Concurrency@@QAE@PBDJ@Z(ptr str long) msvcr120.??0scheduler_resource_allocation_error@Concurrency@@QAE@PBDJ@Z
|
||||
@ cdecl -arch=win64 ??0scheduler_resource_allocation_error@Concurrency@@QEAA@PEBDJ@Z(ptr str long) msvcr120.??0scheduler_resource_allocation_error@Concurrency@@QEAA@PEBDJ@Z
|
||||
@ stub -arch=win32 ??0scheduler_worker_creation_error@Concurrency@@QAE@J@Z
|
||||
@ stub -arch=arm ??0scheduler_worker_creation_error@Concurrency@@QAA@J@Z
|
||||
@ stub -arch=i386 ??0scheduler_worker_creation_error@Concurrency@@QAE@J@Z
|
||||
@ stub -arch=win64 ??0scheduler_worker_creation_error@Concurrency@@QEAA@J@Z
|
||||
@ stub -arch=win32 ??0scheduler_worker_creation_error@Concurrency@@QAE@PBDJ@Z
|
||||
@ stub -arch=arm ??0scheduler_worker_creation_error@Concurrency@@QAA@PBDJ@Z
|
||||
@ stub -arch=i386 ??0scheduler_worker_creation_error@Concurrency@@QAE@PBDJ@Z
|
||||
@ stub -arch=win64 ??0scheduler_worker_creation_error@Concurrency@@QEAA@PEBDJ@Z
|
||||
@ cdecl -arch=arm ??0scoped_lock@critical_section@Concurrency@@QAA@AAV12@@Z(ptr ptr) msvcr120.??0scoped_lock@critical_section@Concurrency@@QAA@AAV12@@Z
|
||||
@ thiscall -arch=i386 ??0scoped_lock@critical_section@Concurrency@@QAE@AAV12@@Z(ptr ptr) msvcr120.??0scoped_lock@critical_section@Concurrency@@QAE@AAV12@@Z
|
||||
@ cdecl -arch=win64 ??0scoped_lock@critical_section@Concurrency@@QEAA@AEAV12@@Z(ptr ptr) msvcr120.??0scoped_lock@critical_section@Concurrency@@QEAA@AEAV12@@Z
|
||||
@ cdecl -arch=arm ??0scoped_lock@reader_writer_lock@Concurrency@@QAA@AAV12@@Z(ptr ptr) msvcr120.??0scoped_lock@reader_writer_lock@Concurrency@@QAA@AAV12@@Z
|
||||
@ thiscall -arch=i386 ??0scoped_lock@reader_writer_lock@Concurrency@@QAE@AAV12@@Z(ptr ptr) msvcr120.??0scoped_lock@reader_writer_lock@Concurrency@@QAE@AAV12@@Z
|
||||
@ cdecl -arch=win64 ??0scoped_lock@reader_writer_lock@Concurrency@@QEAA@AEAV12@@Z(ptr ptr) msvcr120.??0scoped_lock@reader_writer_lock@Concurrency@@QEAA@AEAV12@@Z
|
||||
@ cdecl -arch=arm ??0scoped_lock_read@reader_writer_lock@Concurrency@@QAA@AAV12@@Z(ptr ptr) msvcr120.??0scoped_lock_read@reader_writer_lock@Concurrency@@QAA@AAV12@@Z
|
||||
@ thiscall -arch=i386 ??0scoped_lock_read@reader_writer_lock@Concurrency@@QAE@AAV12@@Z(ptr ptr) msvcr120.??0scoped_lock_read@reader_writer_lock@Concurrency@@QAE@AAV12@@Z
|
||||
@ cdecl -arch=win64 ??0scoped_lock_read@reader_writer_lock@Concurrency@@QEAA@AEAV12@@Z(ptr ptr) msvcr120.??0scoped_lock_read@reader_writer_lock@Concurrency@@QEAA@AEAV12@@Z
|
||||
@ stub -arch=arm ??0unsupported_os@Concurrency@@QAA@PBD@Z
|
||||
@ stub -arch=i386 ??0unsupported_os@Concurrency@@QAE@PBD@Z
|
||||
@ stub -arch=win64 ??0unsupported_os@Concurrency@@QEAA@PEBD@Z
|
||||
@ stub -arch=arm ??0unsupported_os@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??0unsupported_os@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??0unsupported_os@Concurrency@@QEAA@XZ
|
||||
@ cdecl -arch=arm ??1SchedulerPolicy@Concurrency@@QAA@XZ(ptr) msvcr120.??1SchedulerPolicy@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??1SchedulerPolicy@Concurrency@@QAE@XZ(ptr) msvcr120.??1SchedulerPolicy@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??1SchedulerPolicy@Concurrency@@QEAA@XZ(ptr) msvcr120.??1SchedulerPolicy@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=arm ??1_Cancellation_beacon@details@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??1_Cancellation_beacon@details@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??1_Cancellation_beacon@details@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=arm ??1_Concurrent_queue_base_v4@details@Concurrency@@MAA@XZ
|
||||
@ thiscall -arch=i386 ??1_Concurrent_queue_base_v4@details@Concurrency@@MAE@XZ(ptr) msvcp120.??1_Concurrent_queue_base_v4@details@Concurrency@@MAE@XZ
|
||||
@ cdecl -arch=win64 ??1_Concurrent_queue_base_v4@details@Concurrency@@MEAA@XZ(ptr) msvcp120.??1_Concurrent_queue_base_v4@details@Concurrency@@MEAA@XZ
|
||||
@ stub -arch=arm ??1_Concurrent_queue_iterator_base_v4@details@Concurrency@@IAA@XZ
|
||||
@ stub -arch=i386 ??1_Concurrent_queue_iterator_base_v4@details@Concurrency@@IAE@XZ
|
||||
@ stub -arch=win64 ??1_Concurrent_queue_iterator_base_v4@details@Concurrency@@IEAA@XZ
|
||||
@ stub -arch=arm ??1_Concurrent_vector_base_v4@details@Concurrency@@IAA@XZ
|
||||
@ thiscall -arch=i386 ??1_Concurrent_vector_base_v4@details@Concurrency@@IAE@XZ(ptr) msvcp120.??1_Concurrent_vector_base_v4@details@Concurrency@@IAE@XZ
|
||||
@ cdecl -arch=win64 ??1_Concurrent_vector_base_v4@details@Concurrency@@IEAA@XZ(ptr) msvcp120.??1_Concurrent_vector_base_v4@details@Concurrency@@IEAA@XZ
|
||||
@ cdecl -arch=arm ??1_Condition_variable@details@Concurrency@@QAA@XZ(ptr) msvcr120.??1_Condition_variable@details@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??1_Condition_variable@details@Concurrency@@QAE@XZ(ptr) msvcr120.??1_Condition_variable@details@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??1_Condition_variable@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??1_Condition_variable@details@Concurrency@@QEAA@XZ
|
||||
@ cdecl -arch=arm ??1_NonReentrantBlockingLock@details@Concurrency@@QAA@XZ(ptr) msvcr120.??1_NonReentrantBlockingLock@details@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??1_NonReentrantBlockingLock@details@Concurrency@@QAE@XZ(ptr) msvcr120.??1_NonReentrantBlockingLock@details@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??1_NonReentrantBlockingLock@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??1_NonReentrantBlockingLock@details@Concurrency@@QEAA@XZ
|
||||
@ cdecl -arch=arm ??1_ReentrantBlockingLock@details@Concurrency@@QAA@XZ(ptr) msvcr120.??1_ReentrantBlockingLock@details@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??1_ReentrantBlockingLock@details@Concurrency@@QAE@XZ(ptr) msvcr120.??1_ReentrantBlockingLock@details@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??1_ReentrantBlockingLock@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??1_ReentrantBlockingLock@details@Concurrency@@QEAA@XZ
|
||||
@ cdecl -arch=arm ??1_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QAA@XZ(ptr) msvcr120.??1_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??1_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QAE@XZ(ptr) msvcr120.??1_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??1_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??1_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QEAA@XZ
|
||||
@ cdecl -arch=arm ??1_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QAA@XZ(ptr) msvcr120.??1_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??1_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QAE@XZ(ptr) msvcr120.??1_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??1_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??1_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=arm ??1_SpinLock@details@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??1_SpinLock@details@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??1_SpinLock@details@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=arm ??1_StructuredTaskCollection@details@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??1_StructuredTaskCollection@details@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??1_StructuredTaskCollection@details@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=arm ??1_TaskCollection@details@Concurrency@@QAA@XZ
|
||||
@ stub -arch=i386 ??1_TaskCollection@details@Concurrency@@QAE@XZ
|
||||
@ stub -arch=win64 ??1_TaskCollection@details@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=arm ??1_Timer@details@Concurrency@@MAA@XZ
|
||||
@ stub -arch=i386 ??1_Timer@details@Concurrency@@MAE@XZ
|
||||
@ stub -arch=win64 ??1_Timer@details@Concurrency@@MEAA@XZ
|
||||
@ stub -arch=arm ??1agent@Concurrency@@UAA@XZ
|
||||
@ stub -arch=i386 ??1agent@Concurrency@@UAE@XZ
|
||||
@ stub -arch=win64 ??1agent@Concurrency@@UEAA@XZ
|
||||
@ cdecl -arch=arm ??1critical_section@Concurrency@@QAA@XZ(ptr) msvcr120.??1critical_section@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??1critical_section@Concurrency@@QAE@XZ(ptr) msvcr120.??1critical_section@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??1critical_section@Concurrency@@QEAA@XZ(ptr) msvcr120.??1critical_section@Concurrency@@QEAA@XZ
|
||||
@ thiscall -arch=win32 ??1event@Concurrency@@QAE@XZ(ptr) msvcr120.??1event@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=arm ??1event@Concurrency@@QAA@XZ(ptr) msvcr120.??1event@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??1event@Concurrency@@QAE@XZ(ptr) msvcr120.??1event@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??1event@Concurrency@@QEAA@XZ(ptr) msvcr120.??1event@Concurrency@@QEAA@XZ
|
||||
@ thiscall -arch=win32 ??1reader_writer_lock@Concurrency@@QAE@XZ(ptr) msvcr120.??1reader_writer_lock@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=arm ??1reader_writer_lock@Concurrency@@QAA@XZ(ptr) msvcr120.??1reader_writer_lock@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??1reader_writer_lock@Concurrency@@QAE@XZ(ptr) msvcr120.??1reader_writer_lock@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??1reader_writer_lock@Concurrency@@QEAA@XZ(ptr) msvcr120.??1reader_writer_lock@Concurrency@@QEAA@XZ
|
||||
@ cdecl -arch=arm ??1scoped_lock@critical_section@Concurrency@@QAA@XZ(ptr) msvcr120.??1scoped_lock@critical_section@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??1scoped_lock@critical_section@Concurrency@@QAE@XZ(ptr) msvcr120.??1scoped_lock@critical_section@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??1scoped_lock@critical_section@Concurrency@@QEAA@XZ(ptr) msvcr120.??1scoped_lock@critical_section@Concurrency@@QEAA@XZ
|
||||
@ cdecl -arch=arm ??1scoped_lock@reader_writer_lock@Concurrency@@QAA@XZ(ptr) msvcr120.??1scoped_lock@reader_writer_lock@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??1scoped_lock@reader_writer_lock@Concurrency@@QAE@XZ(ptr) msvcr120.??1scoped_lock@reader_writer_lock@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??1scoped_lock@reader_writer_lock@Concurrency@@QEAA@XZ(ptr) msvcr120.??1scoped_lock@reader_writer_lock@Concurrency@@QEAA@XZ
|
||||
@ cdecl -arch=arm ??1scoped_lock_read@reader_writer_lock@Concurrency@@QAA@XZ(ptr) msvcr120.??1scoped_lock_read@reader_writer_lock@Concurrency@@QAA@XZ
|
||||
@ thiscall -arch=i386 ??1scoped_lock_read@reader_writer_lock@Concurrency@@QAE@XZ(ptr) msvcr120.??1scoped_lock_read@reader_writer_lock@Concurrency@@QAE@XZ
|
||||
@ cdecl -arch=win64 ??1scoped_lock_read@reader_writer_lock@Concurrency@@QEAA@XZ(ptr) msvcr120.??1scoped_lock_read@reader_writer_lock@Concurrency@@QEAA@XZ
|
||||
@ stub -arch=arm ??4?$_SpinWait@$00@details@Concurrency@@QAAAAV012@$$QAV012@@Z
|
||||
@ stub -arch=i386 ??4?$_SpinWait@$00@details@Concurrency@@QAEAAV012@$$QAV012@@Z
|
||||
@ stub -arch=win64 ??4?$_SpinWait@$00@details@Concurrency@@QEAAAEAV012@$$QEAV012@@Z
|
||||
@ stub -arch=arm ??4?$_SpinWait@$00@details@Concurrency@@QAAAAV012@ABV012@@Z
|
||||
@ stub -arch=i386 ??4?$_SpinWait@$00@details@Concurrency@@QAEAAV012@ABV012@@Z
|
||||
@ stub -arch=win64 ??4?$_SpinWait@$00@details@Concurrency@@QEAAAEAV012@AEBV012@@Z
|
||||
@ stub -arch=arm ??4?$_SpinWait@$0A@@details@Concurrency@@QAAAAV012@$$QAV012@@Z
|
||||
@ stub -arch=i386 ??4?$_SpinWait@$0A@@details@Concurrency@@QAEAAV012@$$QAV012@@Z
|
||||
@ stub -arch=win64 ??4?$_SpinWait@$0A@@details@Concurrency@@QEAAAEAV012@$$QEAV012@@Z
|
||||
@ stub -arch=arm ??4?$_SpinWait@$0A@@details@Concurrency@@QAAAAV012@ABV012@@Z
|
||||
@ stub -arch=i386 ??4?$_SpinWait@$0A@@details@Concurrency@@QAEAAV012@ABV012@@Z
|
||||
@ stub -arch=win64 ??4?$_SpinWait@$0A@@details@Concurrency@@QEAAAEAV012@AEBV012@@Z
|
||||
@ cdecl -arch=arm ??4SchedulerPolicy@Concurrency@@QAAAAV01@ABV01@@Z(ptr ptr) msvcr120.??4SchedulerPolicy@Concurrency@@QAAAAV01@ABV01@@Z
|
||||
@ thiscall -arch=i386 ??4SchedulerPolicy@Concurrency@@QAEAAV01@ABV01@@Z(ptr ptr) msvcr120.??4SchedulerPolicy@Concurrency@@QAEAAV01@ABV01@@Z
|
||||
@ cdecl -arch=win64 ??4SchedulerPolicy@Concurrency@@QEAAAEAV01@AEBV01@@Z(ptr ptr) msvcr120.??4SchedulerPolicy@Concurrency@@QEAAAEAV01@AEBV01@@Z
|
||||
@ cdecl -arch=arm ??_F?$_SpinWait@$00@details@Concurrency@@QAAXXZ(ptr) msvcr120.??_F?$_SpinWait@$00@details@Concurrency@@QAAXXZ
|
||||
@ thiscall -arch=i386 ??_F?$_SpinWait@$00@details@Concurrency@@QAEXXZ(ptr) msvcr120.??_F?$_SpinWait@$00@details@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=win64 ??_F?$_SpinWait@$00@details@Concurrency@@QEAAXXZ(ptr) msvcr120.??_F?$_SpinWait@$00@details@Concurrency@@QEAAXXZ
|
||||
@ cdecl -arch=arm ??_F?$_SpinWait@$0A@@details@Concurrency@@QAAXXZ(ptr) msvcr120.??_F?$_SpinWait@$0A@@details@Concurrency@@QAAXXZ
|
||||
@ thiscall -arch=i386 ??_F?$_SpinWait@$0A@@details@Concurrency@@QAEXXZ(ptr) msvcr120.??_F?$_SpinWait@$0A@@details@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=win64 ??_F?$_SpinWait@$0A@@details@Concurrency@@QEAAXXZ(ptr) msvcr120.??_F?$_SpinWait@$0A@@details@Concurrency@@QEAAXXZ
|
||||
@ stub -arch=arm ??_F_Context@details@Concurrency@@QAAXXZ
|
||||
@ stub -arch=i386 ??_F_Context@details@Concurrency@@QAEXXZ
|
||||
@ stub -arch=win64 ??_F_Context@details@Concurrency@@QEAAXXZ
|
||||
@ cdecl -arch=arm ??_F_Scheduler@details@Concurrency@@QAAXXZ(ptr) msvcr120.??_F_Scheduler@details@Concurrency@@QAAXXZ
|
||||
@ thiscall -arch=i386 ??_F_Scheduler@details@Concurrency@@QAEXXZ(ptr) msvcr120.??_F_Scheduler@details@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=win64 ??_F_Scheduler@details@Concurrency@@QEAAXXZ(ptr) msvcr120.??_F_Scheduler@details@Concurrency@@QEAAXXZ
|
||||
# extern ?AgentEventGuid@Concurrency@@3U_GUID@@B
|
||||
|
@ -247,6 +355,7 @@
|
|||
@ cdecl ?GetNumberOfVirtualProcessors@CurrentScheduler@Concurrency@@SAIXZ() msvcr120.?GetNumberOfVirtualProcessors@CurrentScheduler@Concurrency@@SAIXZ
|
||||
@ stub ?GetOSVersion@Concurrency@@YA?AW4OSVersion@IResourceManager@1@XZ
|
||||
@ cdecl ?GetPolicy@CurrentScheduler@Concurrency@@SA?AVSchedulerPolicy@2@XZ(ptr) msvcr120.?GetPolicy@CurrentScheduler@Concurrency@@SA?AVSchedulerPolicy@2@XZ
|
||||
@ cdecl -arch=arm ?GetPolicyValue@SchedulerPolicy@Concurrency@@QBAIW4PolicyElementKey@2@@Z(ptr long) msvcr120.?GetPolicyValue@SchedulerPolicy@Concurrency@@QBAIW4PolicyElementKey@2@@Z
|
||||
@ thiscall -arch=i386 ?GetPolicyValue@SchedulerPolicy@Concurrency@@QBEIW4PolicyElementKey@2@@Z(ptr long) msvcr120.?GetPolicyValue@SchedulerPolicy@Concurrency@@QBEIW4PolicyElementKey@2@@Z
|
||||
@ cdecl -arch=win64 ?GetPolicyValue@SchedulerPolicy@Concurrency@@QEBAIW4PolicyElementKey@2@@Z(ptr long) msvcr120.?GetPolicyValue@SchedulerPolicy@Concurrency@@QEBAIW4PolicyElementKey@2@@Z
|
||||
@ stub ?GetProcessorCount@Concurrency@@YAIXZ
|
||||
|
@ -283,56 +392,76 @@
|
|||
@ cdecl -arch=win32 ?ScheduleTask@CurrentScheduler@Concurrency@@SAXP6AXPAX@Z0AAVlocation@2@@Z(ptr ptr ptr) msvcr120.?ScheduleTask@CurrentScheduler@Concurrency@@SAXP6AXPAX@Z0AAVlocation@2@@Z
|
||||
@ cdecl -arch=win64 ?ScheduleTask@CurrentScheduler@Concurrency@@SAXP6AXPEAX@Z0AEAVlocation@2@@Z(ptr ptr ptr) msvcr120.?ScheduleTask@CurrentScheduler@Concurrency@@SAXP6AXPEAX@Z0AEAVlocation@2@@Z
|
||||
# extern ?SchedulerEventGuid@Concurrency@@3U_GUID@@B
|
||||
@ cdecl -arch=arm ?SetConcurrencyLimits@SchedulerPolicy@Concurrency@@QAAXII@Z(ptr long long) msvcr120.?SetConcurrencyLimits@SchedulerPolicy@Concurrency@@QAAXII@Z
|
||||
@ thiscall -arch=i386 ?SetConcurrencyLimits@SchedulerPolicy@Concurrency@@QAEXII@Z(ptr long long) msvcr120.?SetConcurrencyLimits@SchedulerPolicy@Concurrency@@QAEXII@Z
|
||||
@ cdecl -arch=win64 ?SetConcurrencyLimits@SchedulerPolicy@Concurrency@@QEAAXII@Z(ptr long long) msvcr120.?SetConcurrencyLimits@SchedulerPolicy@Concurrency@@QEAAXII@Z
|
||||
@ cdecl -arch=win32 ?SetDefaultSchedulerPolicy@Scheduler@Concurrency@@SAXABVSchedulerPolicy@2@@Z(ptr) msvcr120.?SetDefaultSchedulerPolicy@Scheduler@Concurrency@@SAXABVSchedulerPolicy@2@@Z
|
||||
@ cdecl -arch=win64 ?SetDefaultSchedulerPolicy@Scheduler@Concurrency@@SAXAEBVSchedulerPolicy@2@@Z(ptr) msvcr120.?SetDefaultSchedulerPolicy@Scheduler@Concurrency@@SAXAEBVSchedulerPolicy@2@@Z
|
||||
@ cdecl -arch=arm ?SetPolicyValue@SchedulerPolicy@Concurrency@@QAAIW4PolicyElementKey@2@I@Z(ptr long long) msvcr120.?SetPolicyValue@SchedulerPolicy@Concurrency@@QAAIW4PolicyElementKey@2@I@Z
|
||||
@ thiscall -arch=i386 ?SetPolicyValue@SchedulerPolicy@Concurrency@@QAEIW4PolicyElementKey@2@I@Z(ptr long long) msvcr120.?SetPolicyValue@SchedulerPolicy@Concurrency@@QAEIW4PolicyElementKey@2@I@Z
|
||||
@ cdecl -arch=win64 ?SetPolicyValue@SchedulerPolicy@Concurrency@@QEAAIW4PolicyElementKey@2@I@Z(ptr long long) msvcr120.?SetPolicyValue@SchedulerPolicy@Concurrency@@QEAAIW4PolicyElementKey@2@I@Z
|
||||
# extern ?VirtualProcessorEventGuid@Concurrency@@3U_GUID@@B
|
||||
@ cdecl ?VirtualProcessorId@Context@Concurrency@@SAIXZ() msvcr120.?VirtualProcessorId@Context@Concurrency@@SAIXZ
|
||||
@ cdecl ?Yield@Context@Concurrency@@SAXXZ() msvcr120.?Yield@Context@Concurrency@@SAXXZ
|
||||
@ stub -arch=arm ?_Abort@_StructuredTaskCollection@details@Concurrency@@AAAXXZ
|
||||
@ stub -arch=i386 ?_Abort@_StructuredTaskCollection@details@Concurrency@@AAEXXZ
|
||||
@ stub -arch=win64 ?_Abort@_StructuredTaskCollection@details@Concurrency@@AEAAXXZ
|
||||
@ cdecl -arch=arm ?_Acquire@_NonReentrantBlockingLock@details@Concurrency@@QAAXXZ(ptr) msvcr120.?_Acquire@_NonReentrantBlockingLock@details@Concurrency@@QAAXXZ
|
||||
@ thiscall -arch=i386 ?_Acquire@_NonReentrantBlockingLock@details@Concurrency@@QAEXXZ(ptr) msvcr120.?_Acquire@_NonReentrantBlockingLock@details@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=win64 ?_Acquire@_NonReentrantBlockingLock@details@Concurrency@@QEAAXXZ(ptr) msvcr120.?_Acquire@_NonReentrantBlockingLock@details@Concurrency@@QEAAXXZ
|
||||
@ cdecl -arch=arm ?_Acquire@_NonReentrantPPLLock@details@Concurrency@@QAAXPAX@Z(ptr ptr) msvcr120.?_Acquire@_NonReentrantPPLLock@details@Concurrency@@QAAXPAX@Z
|
||||
@ thiscall -arch=i386 ?_Acquire@_NonReentrantPPLLock@details@Concurrency@@QAEXPAX@Z(ptr ptr) msvcr120.?_Acquire@_NonReentrantPPLLock@details@Concurrency@@QAEXPAX@Z
|
||||
@ cdecl -arch=win64 ?_Acquire@_NonReentrantPPLLock@details@Concurrency@@QEAAXPEAX@Z(ptr ptr) msvcr120.?_Acquire@_NonReentrantPPLLock@details@Concurrency@@QEAAXPEAX@Z
|
||||
@ cdecl -arch=arm ?_Acquire@_ReentrantBlockingLock@details@Concurrency@@QAAXXZ(ptr) msvcr120.?_Acquire@_ReentrantBlockingLock@details@Concurrency@@QAAXXZ
|
||||
@ thiscall -arch=i386 ?_Acquire@_ReentrantBlockingLock@details@Concurrency@@QAEXXZ(ptr) msvcr120.?_Acquire@_ReentrantBlockingLock@details@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=win64 ?_Acquire@_ReentrantBlockingLock@details@Concurrency@@QEAAXXZ(ptr) msvcr120.?_Acquire@_ReentrantBlockingLock@details@Concurrency@@QEAAXXZ
|
||||
@ stub -arch=arm ?_Acquire@_ReentrantLock@details@Concurrency@@QAAXXZ
|
||||
@ stub -arch=i386 ?_Acquire@_ReentrantLock@details@Concurrency@@QAEXXZ
|
||||
@ stub -arch=win64 ?_Acquire@_ReentrantLock@details@Concurrency@@QEAAXXZ
|
||||
@ cdecl -arch=arm ?_Acquire@_ReentrantPPLLock@details@Concurrency@@QAAXPAX@Z(ptr ptr) msvcr120.?_Acquire@_ReentrantPPLLock@details@Concurrency@@QAAXPAX@Z
|
||||
@ thiscall -arch=i386 ?_Acquire@_ReentrantPPLLock@details@Concurrency@@QAEXPAX@Z(ptr ptr) msvcr120.?_Acquire@_ReentrantPPLLock@details@Concurrency@@QAEXPAX@Z
|
||||
@ cdecl -arch=win64 ?_Acquire@_ReentrantPPLLock@details@Concurrency@@QEAAXPEAX@Z(ptr ptr) msvcr120.?_Acquire@_ReentrantPPLLock@details@Concurrency@@QEAAXPEAX@Z
|
||||
@ stub -arch=arm ?_AcquireRead@_ReaderWriterLock@details@Concurrency@@QAAXXZ
|
||||
@ stub -arch=i386 ?_AcquireRead@_ReaderWriterLock@details@Concurrency@@QAEXXZ
|
||||
@ stub -arch=win64 ?_AcquireRead@_ReaderWriterLock@details@Concurrency@@QEAAXXZ
|
||||
@ stub -arch=arm ?_AcquireWrite@_ReaderWriterLock@details@Concurrency@@QAAXXZ
|
||||
@ stub -arch=i386 ?_AcquireWrite@_ReaderWriterLock@details@Concurrency@@QAEXXZ
|
||||
@ stub -arch=win64 ?_AcquireWrite@_ReaderWriterLock@details@Concurrency@@QEAAXXZ
|
||||
@ stub -arch=arm ?_Advance@_Concurrent_queue_iterator_base_v4@details@Concurrency@@IAAXXZ
|
||||
@ stub -arch=i386 ?_Advance@_Concurrent_queue_iterator_base_v4@details@Concurrency@@IAEXXZ
|
||||
@ stub -arch=win64 ?_Advance@_Concurrent_queue_iterator_base_v4@details@Concurrency@@IEAAXXZ
|
||||
@ stub -arch=arm ?_Assign@_Concurrent_queue_iterator_base_v4@details@Concurrency@@IAAXABV123@@Z
|
||||
@ stub -arch=i386 ?_Assign@_Concurrent_queue_iterator_base_v4@details@Concurrency@@IAEXABV123@@Z
|
||||
@ stub -arch=win64 ?_Assign@_Concurrent_queue_iterator_base_v4@details@Concurrency@@IEAAXAEBV123@@Z
|
||||
# extern ?_Byte_reverse_table@details@Concurrency@@3QBEB
|
||||
@ stub -arch=arm ?_Cancel@_StructuredTaskCollection@details@Concurrency@@QAAXXZ
|
||||
@ stub -arch=i386 ?_Cancel@_StructuredTaskCollection@details@Concurrency@@QAEXXZ
|
||||
@ stub -arch=win64 ?_Cancel@_StructuredTaskCollection@details@Concurrency@@QEAAXXZ
|
||||
@ stub -arch=arm ?_Cancel@_TaskCollection@details@Concurrency@@QAAXXZ
|
||||
@ stub -arch=i386 ?_Cancel@_TaskCollection@details@Concurrency@@QAEXXZ
|
||||
@ stub -arch=win64 ?_Cancel@_TaskCollection@details@Concurrency@@QEAAXXZ
|
||||
@ stub -arch=arm ?_CheckTaskCollection@_UnrealizedChore@details@Concurrency@@IAAXXZ
|
||||
@ stub -arch=i386 ?_CheckTaskCollection@_UnrealizedChore@details@Concurrency@@IAEXXZ
|
||||
@ stub -arch=win64 ?_CheckTaskCollection@_UnrealizedChore@details@Concurrency@@IEAAXXZ
|
||||
@ stub -arch=arm ?_CleanupToken@_StructuredTaskCollection@details@Concurrency@@AAAXXZ
|
||||
@ stub -arch=i386 ?_CleanupToken@_StructuredTaskCollection@details@Concurrency@@AAEXXZ
|
||||
@ stub -arch=win64 ?_CleanupToken@_StructuredTaskCollection@details@Concurrency@@AEAAXXZ
|
||||
@ stub -arch=win32 ?_ConcRT_CoreAssert@details@Concurrency@@YAXPBD0H@Z
|
||||
@ stub -arch=win64 ?_ConcRT_CoreAssert@details@Concurrency@@YAXPEBD0H@Z
|
||||
@ stub -arch=win32 ?_ConcRT_Trace@details@Concurrency@@YAXHPB_WZZ
|
||||
@ stub -arch=win64 ?_ConcRT_Trace@details@Concurrency@@YAXHPEB_WZZ
|
||||
@ stub -arch=arm ?_Confirm_cancel@_Cancellation_beacon@details@Concurrency@@QAA_NXZ
|
||||
@ stub -arch=i386 ?_Confirm_cancel@_Cancellation_beacon@details@Concurrency@@QAE_NXZ
|
||||
@ stub -arch=win64 ?_Confirm_cancel@_Cancellation_beacon@details@Concurrency@@QEAA_NXZ
|
||||
@ cdecl ?_CurrentContext@_Context@details@Concurrency@@SA?AV123@XZ() msvcr120.?_CurrentContext@_Context@details@Concurrency@@SA?AV123@XZ
|
||||
@ stub ?_Current_node@location@Concurrency@@SA?AV12@XZ
|
||||
@ stub -arch=arm ?_Destroy@_AsyncTaskCollection@details@Concurrency@@EAAXXZ
|
||||
@ stub -arch=i386 ?_Destroy@_AsyncTaskCollection@details@Concurrency@@EAEXXZ
|
||||
@ stub -arch=win64 ?_Destroy@_AsyncTaskCollection@details@Concurrency@@EEAAXXZ
|
||||
@ cdecl -arch=arm ?_DoYield@?$_SpinWait@$00@details@Concurrency@@IAAXXZ(ptr) msvcr120.?_DoYield@?$_SpinWait@$00@details@Concurrency@@IAAXXZ
|
||||
@ thiscall -arch=i386 ?_DoYield@?$_SpinWait@$00@details@Concurrency@@IAEXXZ(ptr) msvcr120.?_DoYield@?$_SpinWait@$00@details@Concurrency@@IAEXXZ
|
||||
@ cdecl -arch=win64 ?_DoYield@?$_SpinWait@$00@details@Concurrency@@IEAAXXZ(ptr) msvcr120.?_DoYield@?$_SpinWait@$00@details@Concurrency@@IEAAXXZ
|
||||
@ cdecl -arch=arm ?_DoYield@?$_SpinWait@$0A@@details@Concurrency@@IAAXXZ(ptr) msvcr120.?_DoYield@?$_SpinWait@$0A@@details@Concurrency@@IAAXXZ
|
||||
@ thiscall -arch=i386 ?_DoYield@?$_SpinWait@$0A@@details@Concurrency@@IAEXXZ(ptr) msvcr120.?_DoYield@?$_SpinWait@$0A@@details@Concurrency@@IAEXXZ
|
||||
@ cdecl -arch=win64 ?_DoYield@?$_SpinWait@$0A@@details@Concurrency@@IEAAXXZ(ptr) msvcr120.?_DoYield@?$_SpinWait@$0A@@details@Concurrency@@IEAAXXZ
|
||||
@ cdecl ?_Get@_CurrentScheduler@details@Concurrency@@SA?AV_Scheduler@23@XZ(ptr) msvcr120.?_Get@_CurrentScheduler@details@Concurrency@@SA?AV_Scheduler@23@XZ
|
||||
|
@ -344,185 +473,263 @@
|
|||
@ stub -arch=win32 ?_GetCurrentInlineDepth@_StackGuard@details@Concurrency@@CAAAIXZ
|
||||
@ stub -arch=win64 ?_GetCurrentInlineDepth@_StackGuard@details@Concurrency@@CAAEA_KXZ
|
||||
@ cdecl ?_GetNumberOfVirtualProcessors@_CurrentScheduler@details@Concurrency@@SAIXZ() msvcr120.?_GetNumberOfVirtualProcessors@_CurrentScheduler@details@Concurrency@@SAIXZ
|
||||
@ cdecl -arch=arm ?_GetScheduler@_Scheduler@details@Concurrency@@QAAPAVScheduler@3@XZ(ptr) msvcr120.?_GetScheduler@_Scheduler@details@Concurrency@@QAAPAVScheduler@3@XZ
|
||||
@ thiscall -arch=i386 ?_GetScheduler@_Scheduler@details@Concurrency@@QAEPAVScheduler@3@XZ(ptr) msvcr120.?_GetScheduler@_Scheduler@details@Concurrency@@QAEPAVScheduler@3@XZ
|
||||
@ cdecl -arch=win64 ?_GetScheduler@_Scheduler@details@Concurrency@@QEAAPEAVScheduler@3@XZ(ptr) msvcr120.?_GetScheduler@_Scheduler@details@Concurrency@@QEAAPEAVScheduler@3@XZ
|
||||
@ cdecl ?_Id@_CurrentScheduler@details@Concurrency@@SAIXZ() msvcr120.?_Id@_CurrentScheduler@details@Concurrency@@SAIXZ
|
||||
@ stub -arch=arm ?_Internal_assign@_Concurrent_vector_base_v4@details@Concurrency@@IAAXABV123@IP6AXPAXI@ZP6AX1PBXI@Z4@Z
|
||||
@ thiscall -arch=i386 ?_Internal_assign@_Concurrent_vector_base_v4@details@Concurrency@@IAEXABV123@IP6AXPAXI@ZP6AX1PBXI@Z4@Z(ptr ptr long ptr ptr ptr) msvcp120.?_Internal_assign@_Concurrent_vector_base_v4@details@Concurrency@@IAEXABV123@IP6AXPAXI@ZP6AX1PBXI@Z4@Z
|
||||
@ cdecl -arch=win64 ?_Internal_assign@_Concurrent_vector_base_v4@details@Concurrency@@IEAAXAEBV123@_KP6AXPEAX1@ZP6AX2PEBX1@Z5@Z(ptr ptr long ptr ptr ptr) msvcp120.?_Internal_assign@_Concurrent_vector_base_v4@details@Concurrency@@IEAAXAEBV123@_KP6AXPEAX1@ZP6AX2PEBX1@Z5@Z
|
||||
@ stub -arch=arm ?_Internal_capacity@_Concurrent_vector_base_v4@details@Concurrency@@IBAIXZ
|
||||
@ thiscall -arch=i386 ?_Internal_capacity@_Concurrent_vector_base_v4@details@Concurrency@@IBEIXZ(ptr) msvcp120.?_Internal_capacity@_Concurrent_vector_base_v4@details@Concurrency@@IBEIXZ
|
||||
@ cdecl -arch=win64 ?_Internal_capacity@_Concurrent_vector_base_v4@details@Concurrency@@IEBA_KXZ(ptr) msvcp120.?_Internal_capacity@_Concurrent_vector_base_v4@details@Concurrency@@IEBA_KXZ
|
||||
@ stub -arch=arm ?_Internal_clear@_Concurrent_vector_base_v4@details@Concurrency@@IAAIP6AXPAXI@Z@Z
|
||||
@ thiscall -arch=i386 ?_Internal_clear@_Concurrent_vector_base_v4@details@Concurrency@@IAEIP6AXPAXI@Z@Z(ptr ptr) msvcp120.?_Internal_clear@_Concurrent_vector_base_v4@details@Concurrency@@IAEIP6AXPAXI@Z@Z
|
||||
@ cdecl -arch=win64 ?_Internal_clear@_Concurrent_vector_base_v4@details@Concurrency@@IEAA_KP6AXPEAX_K@Z@Z(ptr ptr) msvcp120.?_Internal_clear@_Concurrent_vector_base_v4@details@Concurrency@@IEAA_KP6AXPEAX_K@Z@Z
|
||||
@ stub -arch=arm ?_Internal_compact@_Concurrent_vector_base_v4@details@Concurrency@@IAAPAXIPAXP6AX0I@ZP6AX0PBXI@Z@Z
|
||||
@ thiscall -arch=i386 ?_Internal_compact@_Concurrent_vector_base_v4@details@Concurrency@@IAEPAXIPAXP6AX0I@ZP6AX0PBXI@Z@Z(ptr long ptr ptr ptr) msvcp120.?_Internal_compact@_Concurrent_vector_base_v4@details@Concurrency@@IAEPAXIPAXP6AX0I@ZP6AX0PBXI@Z@Z
|
||||
@ cdecl -arch=win64 ?_Internal_compact@_Concurrent_vector_base_v4@details@Concurrency@@IEAAPEAX_KPEAXP6AX10@ZP6AX1PEBX0@Z@Z(ptr long ptr ptr ptr) msvcp120.?_Internal_compact@_Concurrent_vector_base_v4@details@Concurrency@@IEAAPEAX_KPEAXP6AX10@ZP6AX1PEBX0@Z@Z
|
||||
@ stub -arch=arm ?_Internal_copy@_Concurrent_vector_base_v4@details@Concurrency@@IAAXABV123@IP6AXPAXPBXI@Z@Z
|
||||
@ thiscall -arch=i386 ?_Internal_copy@_Concurrent_vector_base_v4@details@Concurrency@@IAEXABV123@IP6AXPAXPBXI@Z@Z(ptr ptr long ptr) msvcp120.?_Internal_copy@_Concurrent_vector_base_v4@details@Concurrency@@IAEXABV123@IP6AXPAXPBXI@Z@Z
|
||||
@ cdecl -arch=win64 ?_Internal_copy@_Concurrent_vector_base_v4@details@Concurrency@@IEAAXAEBV123@_KP6AXPEAXPEBX1@Z@Z(ptr ptr long ptr) msvcp120.?_Internal_copy@_Concurrent_vector_base_v4@details@Concurrency@@IEAAXAEBV123@_KP6AXPEAXPEBX1@Z@Z
|
||||
@ stub -arch=arm ?_Internal_empty@_Concurrent_queue_base_v4@details@Concurrency@@IBA_NXZ
|
||||
@ thiscall -arch=i386 ?_Internal_empty@_Concurrent_queue_base_v4@details@Concurrency@@IBE_NXZ(ptr) msvcp120.?_Internal_empty@_Concurrent_queue_base_v4@details@Concurrency@@IBE_NXZ
|
||||
@ cdecl -arch=win64 ?_Internal_empty@_Concurrent_queue_base_v4@details@Concurrency@@IEBA_NXZ(ptr) msvcp120.?_Internal_empty@_Concurrent_queue_base_v4@details@Concurrency@@IEBA_NXZ
|
||||
@ stub -arch=arm ?_Internal_finish_clear@_Concurrent_queue_base_v4@details@Concurrency@@IAAXXZ
|
||||
@ thiscall -arch=i386 ?_Internal_finish_clear@_Concurrent_queue_base_v4@details@Concurrency@@IAEXXZ(ptr) msvcp120.?_Internal_finish_clear@_Concurrent_queue_base_v4@details@Concurrency@@IAEXXZ
|
||||
@ cdecl -arch=win64 ?_Internal_finish_clear@_Concurrent_queue_base_v4@details@Concurrency@@IEAAXXZ(ptr) msvcp120.?_Internal_finish_clear@_Concurrent_queue_base_v4@details@Concurrency@@IEAAXXZ
|
||||
@ stub -arch=arm ?_Internal_grow_by@_Concurrent_vector_base_v4@details@Concurrency@@IAAIIIP6AXPAXPBXI@Z1@Z
|
||||
@ thiscall -arch=i386 ?_Internal_grow_by@_Concurrent_vector_base_v4@details@Concurrency@@IAEIIIP6AXPAXPBXI@Z1@Z(ptr long long ptr ptr) msvcp120.?_Internal_grow_by@_Concurrent_vector_base_v4@details@Concurrency@@IAEIIIP6AXPAXPBXI@Z1@Z
|
||||
@ cdecl -arch=win64 ?_Internal_grow_by@_Concurrent_vector_base_v4@details@Concurrency@@IEAA_K_K0P6AXPEAXPEBX0@Z2@Z(ptr long long ptr ptr) msvcp120.?_Internal_grow_by@_Concurrent_vector_base_v4@details@Concurrency@@IEAA_K_K0P6AXPEAXPEBX0@Z2@Z
|
||||
@ stub -arch=arm ?_Internal_grow_to_at_least_with_result@_Concurrent_vector_base_v4@details@Concurrency@@IAAIIIP6AXPAXPBXI@Z1@Z
|
||||
@ thiscall -arch=i386 ?_Internal_grow_to_at_least_with_result@_Concurrent_vector_base_v4@details@Concurrency@@IAEIIIP6AXPAXPBXI@Z1@Z(ptr long long ptr ptr) msvcp120.?_Internal_grow_to_at_least_with_result@_Concurrent_vector_base_v4@details@Concurrency@@IAEIIIP6AXPAXPBXI@Z1@Z
|
||||
@ cdecl -arch=win64 ?_Internal_grow_to_at_least_with_result@_Concurrent_vector_base_v4@details@Concurrency@@IEAA_K_K0P6AXPEAXPEBX0@Z2@Z(ptr long long ptr ptr) msvcp120.?_Internal_grow_to_at_least_with_result@_Concurrent_vector_base_v4@details@Concurrency@@IEAA_K_K0P6AXPEAXPEBX0@Z2@Z
|
||||
@ stub -arch=arm ?_Internal_move_push@_Concurrent_queue_base_v4@details@Concurrency@@IAAXPAX@Z
|
||||
@ thiscall -arch=i386 ?_Internal_move_push@_Concurrent_queue_base_v4@details@Concurrency@@IAEXPAX@Z(ptr ptr) msvcp120.?_Internal_move_push@_Concurrent_queue_base_v4@details@Concurrency@@IAEXPAX@Z
|
||||
@ cdecl -arch=win64 ?_Internal_move_push@_Concurrent_queue_base_v4@details@Concurrency@@IEAAXPEAX@Z(ptr ptr) msvcp120.?_Internal_move_push@_Concurrent_queue_base_v4@details@Concurrency@@IEAAXPEAX@Z
|
||||
@ stub -arch=arm ?_Internal_pop_if_present@_Concurrent_queue_base_v4@details@Concurrency@@IAA_NPAX@Z
|
||||
@ thiscall -arch=i386 ?_Internal_pop_if_present@_Concurrent_queue_base_v4@details@Concurrency@@IAE_NPAX@Z(ptr ptr) msvcp120.?_Internal_pop_if_present@_Concurrent_queue_base_v4@details@Concurrency@@IAE_NPAX@Z
|
||||
@ cdecl -arch=win64 ?_Internal_pop_if_present@_Concurrent_queue_base_v4@details@Concurrency@@IEAA_NPEAX@Z(ptr ptr) msvcp120.?_Internal_pop_if_present@_Concurrent_queue_base_v4@details@Concurrency@@IEAA_NPEAX@Z
|
||||
@ stub -arch=arm ?_Internal_push@_Concurrent_queue_base_v4@details@Concurrency@@IAAXPBX@Z
|
||||
@ thiscall -arch=i386 ?_Internal_push@_Concurrent_queue_base_v4@details@Concurrency@@IAEXPBX@Z(ptr ptr) msvcp120.?_Internal_push@_Concurrent_queue_base_v4@details@Concurrency@@IAEXPBX@Z
|
||||
@ cdecl -arch=win64 ?_Internal_push@_Concurrent_queue_base_v4@details@Concurrency@@IEAAXPEBX@Z(ptr ptr) msvcp120.?_Internal_push@_Concurrent_queue_base_v4@details@Concurrency@@IEAAXPEBX@Z
|
||||
@ stub -arch=arm ?_Internal_push_back@_Concurrent_vector_base_v4@details@Concurrency@@IAAPAXIAAI@Z
|
||||
@ thiscall -arch=i386 ?_Internal_push_back@_Concurrent_vector_base_v4@details@Concurrency@@IAEPAXIAAI@Z(ptr long long) msvcp120.?_Internal_push_back@_Concurrent_vector_base_v4@details@Concurrency@@IAEPAXIAAI@Z
|
||||
@ cdecl -arch=win64 ?_Internal_push_back@_Concurrent_vector_base_v4@details@Concurrency@@IEAAPEAX_KAEA_K@Z(ptr long long) msvcp120.?_Internal_push_back@_Concurrent_vector_base_v4@details@Concurrency@@IEAAPEAX_KAEA_K@Z
|
||||
@ stub -arch=arm ?_Internal_reserve@_Concurrent_vector_base_v4@details@Concurrency@@IAAXIII@Z
|
||||
@ thiscall -arch=i386 ?_Internal_reserve@_Concurrent_vector_base_v4@details@Concurrency@@IAEXIII@Z(ptr long long long) msvcp120.?_Internal_reserve@_Concurrent_vector_base_v4@details@Concurrency@@IAEXIII@Z
|
||||
@ cdecl -arch=win64 ?_Internal_reserve@_Concurrent_vector_base_v4@details@Concurrency@@IEAAX_K00@Z(ptr long long long) msvcp120.?_Internal_reserve@_Concurrent_vector_base_v4@details@Concurrency@@IEAAX_K00@Z
|
||||
@ stub -arch=arm ?_Internal_resize@_Concurrent_vector_base_v4@details@Concurrency@@IAAXIIIP6AXPAXI@ZP6AX0PBXI@Z2@Z
|
||||
@ thiscall -arch=i386 ?_Internal_resize@_Concurrent_vector_base_v4@details@Concurrency@@IAEXIIIP6AXPAXI@ZP6AX0PBXI@Z2@Z(ptr long long long ptr ptr ptr) msvcp120.?_Internal_resize@_Concurrent_vector_base_v4@details@Concurrency@@IAEXIIIP6AXPAXI@ZP6AX0PBXI@Z2@Z
|
||||
@ cdecl -arch=win64 ?_Internal_resize@_Concurrent_vector_base_v4@details@Concurrency@@IEAAX_K00P6AXPEAX0@ZP6AX1PEBX0@Z3@Z(ptr long long long ptr ptr ptr) msvcp120.?_Internal_resize@_Concurrent_vector_base_v4@details@Concurrency@@IEAAX_K00P6AXPEAX0@ZP6AX1PEBX0@Z3@Z
|
||||
@ stub -arch=arm ?_Internal_size@_Concurrent_queue_base_v4@details@Concurrency@@IBAIXZ
|
||||
@ thiscall -arch=i386 ?_Internal_size@_Concurrent_queue_base_v4@details@Concurrency@@IBEIXZ(ptr) msvcp120.?_Internal_size@_Concurrent_queue_base_v4@details@Concurrency@@IBEIXZ
|
||||
@ cdecl -arch=win64 ?_Internal_size@_Concurrent_queue_base_v4@details@Concurrency@@IEBA_KXZ(ptr) msvcp120.?_Internal_size@_Concurrent_queue_base_v4@details@Concurrency@@IEBA_KXZ
|
||||
@ stub -arch=arm ?_Internal_swap@_Concurrent_queue_base_v4@details@Concurrency@@IAAXAAV123@@Z
|
||||
@ thiscall -arch=i386 ?_Internal_swap@_Concurrent_queue_base_v4@details@Concurrency@@IAEXAAV123@@Z(ptr ptr) msvcp120.?_Internal_swap@_Concurrent_queue_base_v4@details@Concurrency@@IAEXAAV123@@Z
|
||||
@ cdecl -arch=win64 ?_Internal_swap@_Concurrent_queue_base_v4@details@Concurrency@@IEAAXAEAV123@@Z(ptr ptr) msvcp120.?_Internal_swap@_Concurrent_queue_base_v4@details@Concurrency@@IEAAXAEAV123@@Z
|
||||
@ stub -arch=arm ?_Internal_swap@_Concurrent_vector_base_v4@details@Concurrency@@IAAXAAV123@@Z
|
||||
@ thiscall -arch=i386 ?_Internal_swap@_Concurrent_vector_base_v4@details@Concurrency@@IAEXAAV123@@Z(ptr ptr) msvcp120.?_Internal_swap@_Concurrent_vector_base_v4@details@Concurrency@@IAEXAAV123@@Z
|
||||
@ cdecl -arch=win64 ?_Internal_swap@_Concurrent_vector_base_v4@details@Concurrency@@IEAAXAEAV123@@Z(ptr ptr) msvcp120.?_Internal_swap@_Concurrent_vector_base_v4@details@Concurrency@@IEAAXAEAV123@@Z
|
||||
@ stub -arch=arm ?_Internal_throw_exception@_Concurrent_queue_base_v4@details@Concurrency@@IBAXXZ
|
||||
@ thiscall -arch=i386 ?_Internal_throw_exception@_Concurrent_queue_base_v4@details@Concurrency@@IBEXXZ(ptr) msvcp120.?_Internal_throw_exception@_Concurrent_queue_base_v4@details@Concurrency@@IBEXXZ
|
||||
@ cdecl -arch=win64 ?_Internal_throw_exception@_Concurrent_queue_base_v4@details@Concurrency@@IEBAXXZ(ptr) msvcp120.?_Internal_throw_exception@_Concurrent_queue_base_v4@details@Concurrency@@IEBAXXZ
|
||||
@ stub -arch=arm ?_Internal_throw_exception@_Concurrent_vector_base_v4@details@Concurrency@@IBAXI@Z
|
||||
@ thiscall -arch=i386 ?_Internal_throw_exception@_Concurrent_vector_base_v4@details@Concurrency@@IBEXI@Z(ptr long) msvcp120.?_Internal_throw_exception@_Concurrent_vector_base_v4@details@Concurrency@@IBEXI@Z
|
||||
@ cdecl -arch=win64 ?_Internal_throw_exception@_Concurrent_vector_base_v4@details@Concurrency@@IEBAX_K@Z(ptr long) msvcp120.?_Internal_throw_exception@_Concurrent_vector_base_v4@details@Concurrency@@IEBAX_K@Z
|
||||
@ stub -arch=arm ?_IsCanceling@_StructuredTaskCollection@details@Concurrency@@QAA_NXZ
|
||||
@ stub -arch=i386 ?_IsCanceling@_StructuredTaskCollection@details@Concurrency@@QAE_NXZ
|
||||
@ stub -arch=win64 ?_IsCanceling@_StructuredTaskCollection@details@Concurrency@@QEAA_NXZ
|
||||
@ stub -arch=arm ?_IsCanceling@_TaskCollection@details@Concurrency@@QAA_NXZ
|
||||
@ stub -arch=i386 ?_IsCanceling@_TaskCollection@details@Concurrency@@QAE_NXZ
|
||||
@ stub -arch=win64 ?_IsCanceling@_TaskCollection@details@Concurrency@@QEAA_NXZ
|
||||
@ stub -arch=arm ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QBA_NXZ
|
||||
@ stub -arch=i386 ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QBE_NXZ
|
||||
@ stub -arch=win64 ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QEBA_NXZ
|
||||
@ stub -arch=win32 ?_NewCollection@_AsyncTaskCollection@details@Concurrency@@SAPAV123@PAV_CancellationTokenState@23@@Z
|
||||
@ stub -arch=win64 ?_NewCollection@_AsyncTaskCollection@details@Concurrency@@SAPEAV123@PEAV_CancellationTokenState@23@@Z
|
||||
@ cdecl -arch=arm ?_NumberOfSpins@?$_SpinWait@$00@details@Concurrency@@IAAKXZ(ptr) msvcr120.?_NumberOfSpins@?$_SpinWait@$00@details@Concurrency@@IAAKXZ
|
||||
@ thiscall -arch=i386 ?_NumberOfSpins@?$_SpinWait@$00@details@Concurrency@@IAEKXZ(ptr) msvcr120.?_NumberOfSpins@?$_SpinWait@$00@details@Concurrency@@IAEKXZ
|
||||
@ cdecl -arch=win64 ?_NumberOfSpins@?$_SpinWait@$00@details@Concurrency@@IEAAKXZ(ptr) msvcr120.?_NumberOfSpins@?$_SpinWait@$00@details@Concurrency@@IEAAKXZ
|
||||
@ cdecl -arch=arm ?_NumberOfSpins@?$_SpinWait@$0A@@details@Concurrency@@IAAKXZ(ptr) msvcr120.?_NumberOfSpins@?$_SpinWait@$0A@@details@Concurrency@@IAAKXZ
|
||||
@ thiscall -arch=i386 ?_NumberOfSpins@?$_SpinWait@$0A@@details@Concurrency@@IAEKXZ(ptr) msvcr120.?_NumberOfSpins@?$_SpinWait@$0A@@details@Concurrency@@IAEKXZ
|
||||
@ cdecl -arch=win64 ?_NumberOfSpins@?$_SpinWait@$0A@@details@Concurrency@@IEAAKXZ(ptr) msvcr120.?_NumberOfSpins@?$_SpinWait@$0A@@details@Concurrency@@IEAAKXZ
|
||||
@ stub ?_Oversubscribe@_Context@details@Concurrency@@SAX_N@Z
|
||||
@ cdecl -arch=arm ?_Reference@_Scheduler@details@Concurrency@@QAAIXZ(ptr) msvcr120.?_Reference@_Scheduler@details@Concurrency@@QAAIXZ
|
||||
@ thiscall -arch=i386 ?_Reference@_Scheduler@details@Concurrency@@QAEIXZ(ptr) msvcr120.?_Reference@_Scheduler@details@Concurrency@@QAEIXZ
|
||||
@ cdecl -arch=win64 ?_Reference@_Scheduler@details@Concurrency@@QEAAIXZ(ptr) msvcr120.?_Reference@_Scheduler@details@Concurrency@@QEAAIXZ
|
||||
@ cdecl -arch=arm ?_Release@_NonReentrantBlockingLock@details@Concurrency@@QAAXXZ(ptr) msvcr120.?_Release@_NonReentrantBlockingLock@details@Concurrency@@QAAXXZ
|
||||
@ thiscall -arch=i386 ?_Release@_NonReentrantBlockingLock@details@Concurrency@@QAEXXZ(ptr) msvcr120.?_Release@_NonReentrantBlockingLock@details@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=win64 ?_Release@_NonReentrantBlockingLock@details@Concurrency@@QEAAXXZ(ptr) msvcr120.?_Release@_NonReentrantBlockingLock@details@Concurrency@@QEAAXXZ
|
||||
@ cdecl -arch=arm ?_Release@_NonReentrantPPLLock@details@Concurrency@@QAAXXZ(ptr) msvcr120.?_Release@_NonReentrantPPLLock@details@Concurrency@@QAAXXZ
|
||||
@ thiscall -arch=i386 ?_Release@_NonReentrantPPLLock@details@Concurrency@@QAEXXZ(ptr) msvcr120.?_Release@_NonReentrantPPLLock@details@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=win64 ?_Release@_NonReentrantPPLLock@details@Concurrency@@QEAAXXZ(ptr) msvcr120.?_Release@_NonReentrantPPLLock@details@Concurrency@@QEAAXXZ
|
||||
@ cdecl -arch=arm ?_Release@_ReentrantBlockingLock@details@Concurrency@@QAAXXZ(ptr) msvcr120.?_Release@_ReentrantBlockingLock@details@Concurrency@@QAAXXZ
|
||||
@ thiscall -arch=i386 ?_Release@_ReentrantBlockingLock@details@Concurrency@@QAEXXZ(ptr) msvcr120.?_Release@_ReentrantBlockingLock@details@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=win64 ?_Release@_ReentrantBlockingLock@details@Concurrency@@QEAAXXZ(ptr) msvcr120.?_Release@_ReentrantBlockingLock@details@Concurrency@@QEAAXXZ
|
||||
@ stub -arch=arm ?_Release@_ReentrantLock@details@Concurrency@@QAAXXZ
|
||||
@ stub -arch=i386 ?_Release@_ReentrantLock@details@Concurrency@@QAEXXZ
|
||||
@ stub -arch=win64 ?_Release@_ReentrantLock@details@Concurrency@@QEAAXXZ
|
||||
@ cdecl -arch=arm ?_Release@_ReentrantPPLLock@details@Concurrency@@QAAXXZ(ptr) msvcr120.?_Release@_ReentrantPPLLock@details@Concurrency@@QAAXXZ
|
||||
@ thiscall -arch=i386 ?_Release@_ReentrantPPLLock@details@Concurrency@@QAEXXZ(ptr) msvcr120.?_Release@_ReentrantPPLLock@details@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=win64 ?_Release@_ReentrantPPLLock@details@Concurrency@@QEAAXXZ(ptr) msvcr120.?_Release@_ReentrantPPLLock@details@Concurrency@@QEAAXXZ
|
||||
@ cdecl -arch=arm ?_Release@_Scheduler@details@Concurrency@@QAAIXZ(ptr) msvcr120.?_Release@_Scheduler@details@Concurrency@@QAAIXZ
|
||||
@ thiscall -arch=i386 ?_Release@_Scheduler@details@Concurrency@@QAEIXZ(ptr) msvcr120.?_Release@_Scheduler@details@Concurrency@@QAEIXZ
|
||||
@ cdecl -arch=win64 ?_Release@_Scheduler@details@Concurrency@@QEAAIXZ(ptr) msvcr120.?_Release@_Scheduler@details@Concurrency@@QEAAIXZ
|
||||
@ stub -arch=arm ?_ReleaseRead@_ReaderWriterLock@details@Concurrency@@QAAXXZ
|
||||
@ stub -arch=i386 ?_ReleaseRead@_ReaderWriterLock@details@Concurrency@@QAEXXZ
|
||||
@ stub -arch=win64 ?_ReleaseRead@_ReaderWriterLock@details@Concurrency@@QEAAXXZ
|
||||
@ stub -arch=arm ?_ReleaseWrite@_ReaderWriterLock@details@Concurrency@@QAAXXZ
|
||||
@ stub -arch=i386 ?_ReleaseWrite@_ReaderWriterLock@details@Concurrency@@QAEXXZ
|
||||
@ stub -arch=win64 ?_ReleaseWrite@_ReaderWriterLock@details@Concurrency@@QEAAXXZ
|
||||
@ cdecl -arch=arm ?_Reset@?$_SpinWait@$00@details@Concurrency@@IAAXXZ(ptr) msvcr120.?_Reset@?$_SpinWait@$00@details@Concurrency@@IAAXXZ
|
||||
@ thiscall -arch=i386 ?_Reset@?$_SpinWait@$00@details@Concurrency@@IAEXXZ(ptr) msvcr120.?_Reset@?$_SpinWait@$00@details@Concurrency@@IAEXXZ
|
||||
@ cdecl -arch=win64 ?_Reset@?$_SpinWait@$00@details@Concurrency@@IEAAXXZ(ptr) msvcr120.?_Reset@?$_SpinWait@$00@details@Concurrency@@IEAAXXZ
|
||||
@ cdecl -arch=arm ?_Reset@?$_SpinWait@$0A@@details@Concurrency@@IAAXXZ(ptr) msvcr120.?_Reset@?$_SpinWait@$0A@@details@Concurrency@@IAAXXZ
|
||||
@ thiscall -arch=i386 ?_Reset@?$_SpinWait@$0A@@details@Concurrency@@IAEXXZ(ptr) msvcr120.?_Reset@?$_SpinWait@$0A@@details@Concurrency@@IAEXXZ
|
||||
@ cdecl -arch=win64 ?_Reset@?$_SpinWait@$0A@@details@Concurrency@@IEAAXXZ(ptr) msvcr120.?_Reset@?$_SpinWait@$0A@@details@Concurrency@@IEAAXXZ
|
||||
@ stub -arch=win32 ?_RunAndWait@_StructuredTaskCollection@details@Concurrency@@QAG?AW4_TaskCollectionStatus@23@PAV_UnrealizedChore@23@@Z
|
||||
@ stub -arch=arm ?_RunAndWait@_StructuredTaskCollection@details@Concurrency@@QAA?AW4_TaskCollectionStatus@23@PAV_UnrealizedChore@23@@Z
|
||||
@ stub -arch=i386 ?_RunAndWait@_StructuredTaskCollection@details@Concurrency@@QAG?AW4_TaskCollectionStatus@23@PAV_UnrealizedChore@23@@Z
|
||||
@ stub -arch=win64 ?_RunAndWait@_StructuredTaskCollection@details@Concurrency@@QEAA?AW4_TaskCollectionStatus@23@PEAV_UnrealizedChore@23@@Z
|
||||
@ stub -arch=win32 ?_RunAndWait@_TaskCollection@details@Concurrency@@QAG?AW4_TaskCollectionStatus@23@PAV_UnrealizedChore@23@@Z
|
||||
@ stub -arch=arm ?_RunAndWait@_TaskCollection@details@Concurrency@@QAA?AW4_TaskCollectionStatus@23@PAV_UnrealizedChore@23@@Z
|
||||
@ stub -arch=i386 ?_RunAndWait@_TaskCollection@details@Concurrency@@QAG?AW4_TaskCollectionStatus@23@PAV_UnrealizedChore@23@@Z
|
||||
@ stub -arch=win64 ?_RunAndWait@_TaskCollection@details@Concurrency@@QEAA?AW4_TaskCollectionStatus@23@PEAV_UnrealizedChore@23@@Z
|
||||
@ stub -arch=arm ?_Schedule@_StructuredTaskCollection@details@Concurrency@@QAAXPAV_UnrealizedChore@23@@Z
|
||||
@ stub -arch=i386 ?_Schedule@_StructuredTaskCollection@details@Concurrency@@QAEXPAV_UnrealizedChore@23@@Z
|
||||
@ stub -arch=win64 ?_Schedule@_StructuredTaskCollection@details@Concurrency@@QEAAXPEAV_UnrealizedChore@23@@Z
|
||||
@ stub -arch=arm ?_Schedule@_StructuredTaskCollection@details@Concurrency@@QAAXPAV_UnrealizedChore@23@PAVlocation@3@@Z
|
||||
@ stub -arch=i386 ?_Schedule@_StructuredTaskCollection@details@Concurrency@@QAEXPAV_UnrealizedChore@23@PAVlocation@3@@Z
|
||||
@ stub -arch=win64 ?_Schedule@_StructuredTaskCollection@details@Concurrency@@QEAAXPEAV_UnrealizedChore@23@PEAVlocation@3@@Z
|
||||
@ stub -arch=arm ?_Schedule@_TaskCollection@details@Concurrency@@QAAXPAV_UnrealizedChore@23@@Z
|
||||
@ stub -arch=i386 ?_Schedule@_TaskCollection@details@Concurrency@@QAEXPAV_UnrealizedChore@23@@Z
|
||||
@ stub -arch=win64 ?_Schedule@_TaskCollection@details@Concurrency@@QEAAXPEAV_UnrealizedChore@23@@Z
|
||||
@ stub -arch=arm ?_Schedule@_TaskCollection@details@Concurrency@@QAAXPAV_UnrealizedChore@23@PAVlocation@3@@Z
|
||||
@ stub -arch=i386 ?_Schedule@_TaskCollection@details@Concurrency@@QAEXPAV_UnrealizedChore@23@PAVlocation@3@@Z
|
||||
@ stub -arch=win64 ?_Schedule@_TaskCollection@details@Concurrency@@QEAAXPEAV_UnrealizedChore@23@PEAVlocation@3@@Z
|
||||
@ cdecl -arch=win32 ?_ScheduleTask@_CurrentScheduler@details@Concurrency@@SAXP6AXPAX@Z0@Z(ptr ptr) msvcr120.?_ScheduleTask@_CurrentScheduler@details@Concurrency@@SAXP6AXPAX@Z0@Z
|
||||
@ cdecl -arch=win64 ?_ScheduleTask@_CurrentScheduler@details@Concurrency@@SAXP6AXPEAX@Z0@Z(ptr ptr) msvcr120.?_ScheduleTask@_CurrentScheduler@details@Concurrency@@SAXP6AXPEAX@Z0@Z
|
||||
@ cdecl -arch=win32 ?_Segment_index_of@_Concurrent_vector_base_v4@details@Concurrency@@KAII@Z(long) msvcp120.?_Segment_index_of@_Concurrent_vector_base_v4@details@Concurrency@@KAII@Z
|
||||
@ cdecl -arch=win64 ?_Segment_index_of@_Concurrent_vector_base_v4@details@Concurrency@@KA_K_K@Z(long) msvcp120.?_Segment_index_of@_Concurrent_vector_base_v4@details@Concurrency@@KA_K_K@Z
|
||||
@ cdecl -arch=arm ?_SetSpinCount@?$_SpinWait@$00@details@Concurrency@@QAAXI@Z(ptr long) msvcr120.?_SetSpinCount@?$_SpinWait@$00@details@Concurrency@@QAAXI@Z
|
||||
@ thiscall -arch=i386 ?_SetSpinCount@?$_SpinWait@$00@details@Concurrency@@QAEXI@Z(ptr long) msvcr120.?_SetSpinCount@?$_SpinWait@$00@details@Concurrency@@QAEXI@Z
|
||||
@ cdecl -arch=win64 ?_SetSpinCount@?$_SpinWait@$00@details@Concurrency@@QEAAXI@Z(ptr long) msvcr120.?_SetSpinCount@?$_SpinWait@$00@details@Concurrency@@QEAAXI@Z
|
||||
@ cdecl -arch=arm ?_SetSpinCount@?$_SpinWait@$0A@@details@Concurrency@@QAAXI@Z(ptr long) msvcr120.?_SetSpinCount@?$_SpinWait@$0A@@details@Concurrency@@QAAXI@Z
|
||||
@ thiscall -arch=i386 ?_SetSpinCount@?$_SpinWait@$0A@@details@Concurrency@@QAEXI@Z(ptr long) msvcr120.?_SetSpinCount@?$_SpinWait@$0A@@details@Concurrency@@QAEXI@Z
|
||||
@ cdecl -arch=win64 ?_SetSpinCount@?$_SpinWait@$0A@@details@Concurrency@@QEAAXI@Z(ptr long) msvcr120.?_SetSpinCount@?$_SpinWait@$0A@@details@Concurrency@@QEAAXI@Z
|
||||
@ cdecl -arch=arm ?_ShouldSpinAgain@?$_SpinWait@$00@details@Concurrency@@IAA_NXZ(ptr) msvcr120.?_ShouldSpinAgain@?$_SpinWait@$00@details@Concurrency@@IAA_NXZ
|
||||
@ thiscall -arch=i386 ?_ShouldSpinAgain@?$_SpinWait@$00@details@Concurrency@@IAE_NXZ(ptr) msvcr120.?_ShouldSpinAgain@?$_SpinWait@$00@details@Concurrency@@IAE_NXZ
|
||||
@ cdecl -arch=win64 ?_ShouldSpinAgain@?$_SpinWait@$00@details@Concurrency@@IEAA_NXZ(ptr) msvcr120.?_ShouldSpinAgain@?$_SpinWait@$00@details@Concurrency@@IEAA_NXZ
|
||||
@ cdecl -arch=arm ?_ShouldSpinAgain@?$_SpinWait@$0A@@details@Concurrency@@IAA_NXZ(ptr) msvcr120.?_ShouldSpinAgain@?$_SpinWait@$0A@@details@Concurrency@@IAA_NXZ
|
||||
@ thiscall -arch=i386 ?_ShouldSpinAgain@?$_SpinWait@$0A@@details@Concurrency@@IAE_NXZ(ptr) msvcr120.?_ShouldSpinAgain@?$_SpinWait@$0A@@details@Concurrency@@IAE_NXZ
|
||||
@ cdecl -arch=win64 ?_ShouldSpinAgain@?$_SpinWait@$0A@@details@Concurrency@@IEAA_NXZ(ptr) msvcr120.?_ShouldSpinAgain@?$_SpinWait@$0A@@details@Concurrency@@IEAA_NXZ
|
||||
@ cdecl -arch=arm ?_SpinOnce@?$_SpinWait@$00@details@Concurrency@@QAA_NXZ(ptr) msvcr120.?_SpinOnce@?$_SpinWait@$00@details@Concurrency@@QAA_NXZ
|
||||
@ thiscall -arch=i386 ?_SpinOnce@?$_SpinWait@$00@details@Concurrency@@QAE_NXZ(ptr) msvcr120.?_SpinOnce@?$_SpinWait@$00@details@Concurrency@@QAE_NXZ
|
||||
@ cdecl -arch=win64 ?_SpinOnce@?$_SpinWait@$00@details@Concurrency@@QEAA_NXZ(ptr) msvcr120.?_SpinOnce@?$_SpinWait@$00@details@Concurrency@@QEAA_NXZ
|
||||
@ cdecl -arch=arm ?_SpinOnce@?$_SpinWait@$0A@@details@Concurrency@@QAA_NXZ(ptr) msvcr120.?_SpinOnce@?$_SpinWait@$0A@@details@Concurrency@@QAA_NXZ
|
||||
@ thiscall -arch=i386 ?_SpinOnce@?$_SpinWait@$0A@@details@Concurrency@@QAE_NXZ(ptr) msvcr120.?_SpinOnce@?$_SpinWait@$0A@@details@Concurrency@@QAE_NXZ
|
||||
@ cdecl -arch=win64 ?_SpinOnce@?$_SpinWait@$0A@@details@Concurrency@@QEAA_NXZ(ptr) msvcr120.?_SpinOnce@?$_SpinWait@$0A@@details@Concurrency@@QEAA_NXZ
|
||||
@ cdecl ?_SpinYield@Context@Concurrency@@SAXXZ() msvcr120.?_SpinYield@Context@Concurrency@@SAXXZ
|
||||
@ stub -arch=arm ?_Start@_Timer@details@Concurrency@@IAAXXZ
|
||||
@ stub -arch=i386 ?_Start@_Timer@details@Concurrency@@IAEXXZ
|
||||
@ stub -arch=win64 ?_Start@_Timer@details@Concurrency@@IEAAXXZ
|
||||
@ stub -arch=arm ?_Stop@_Timer@details@Concurrency@@IAAXXZ
|
||||
@ stub -arch=i386 ?_Stop@_Timer@details@Concurrency@@IAEXXZ
|
||||
@ stub -arch=win64 ?_Stop@_Timer@details@Concurrency@@IEAAXXZ
|
||||
@ varargs ?_Trace_agents@Concurrency@@YAXW4Agents_EventType@1@_JZZ(long int64) msvcr120.?_Trace_agents@Concurrency@@YAXW4Agents_EventType@1@_JZZ
|
||||
@ cdecl -arch=win32 ?_Trace_ppl_function@Concurrency@@YAXABU_GUID@@EW4ConcRT_EventType@1@@Z(ptr long long) msvcr120.?_Trace_ppl_function@Concurrency@@YAXABU_GUID@@EW4ConcRT_EventType@1@@Z
|
||||
@ cdecl -arch=win64 ?_Trace_ppl_function@Concurrency@@YAXAEBU_GUID@@EW4ConcRT_EventType@1@@Z(ptr long long) msvcr120.?_Trace_ppl_function@Concurrency@@YAXAEBU_GUID@@EW4ConcRT_EventType@1@@Z
|
||||
@ cdecl -arch=arm ?_TryAcquire@_NonReentrantBlockingLock@details@Concurrency@@QAA_NXZ(ptr) msvcr120.?_TryAcquire@_NonReentrantBlockingLock@details@Concurrency@@QAA_NXZ
|
||||
@ thiscall -arch=i386 ?_TryAcquire@_NonReentrantBlockingLock@details@Concurrency@@QAE_NXZ(ptr) msvcr120.?_TryAcquire@_NonReentrantBlockingLock@details@Concurrency@@QAE_NXZ
|
||||
@ cdecl -arch=win64 ?_TryAcquire@_NonReentrantBlockingLock@details@Concurrency@@QEAA_NXZ(ptr) msvcr120.?_TryAcquire@_NonReentrantBlockingLock@details@Concurrency@@QEAA_NXZ
|
||||
@ cdecl -arch=arm ?_TryAcquire@_ReentrantBlockingLock@details@Concurrency@@QAA_NXZ(ptr) msvcr120.?_TryAcquire@_ReentrantBlockingLock@details@Concurrency@@QAA_NXZ
|
||||
@ thiscall -arch=i386 ?_TryAcquire@_ReentrantBlockingLock@details@Concurrency@@QAE_NXZ(ptr) msvcr120.?_TryAcquire@_ReentrantBlockingLock@details@Concurrency@@QAE_NXZ
|
||||
@ cdecl -arch=win64 ?_TryAcquire@_ReentrantBlockingLock@details@Concurrency@@QEAA_NXZ(ptr) msvcr120.?_TryAcquire@_ReentrantBlockingLock@details@Concurrency@@QEAA_NXZ
|
||||
@ stub -arch=arm ?_TryAcquire@_ReentrantLock@details@Concurrency@@QAA_NXZ
|
||||
@ stub -arch=i386 ?_TryAcquire@_ReentrantLock@details@Concurrency@@QAE_NXZ
|
||||
@ stub -arch=win64 ?_TryAcquire@_ReentrantLock@details@Concurrency@@QEAA_NXZ
|
||||
@ stub -arch=arm ?_TryAcquireWrite@_ReaderWriterLock@details@Concurrency@@QAA_NXZ
|
||||
@ stub -arch=i386 ?_TryAcquireWrite@_ReaderWriterLock@details@Concurrency@@QAE_NXZ
|
||||
@ stub -arch=win64 ?_TryAcquireWrite@_ReaderWriterLock@details@Concurrency@@QEAA_NXZ
|
||||
@ stub ?_UnderlyingYield@details@Concurrency@@YAXXZ
|
||||
@ cdecl ?_Value@_SpinCount@details@Concurrency@@SAIXZ() msvcr120.?_Value@_SpinCount@details@Concurrency@@SAIXZ
|
||||
@ cdecl ?_Yield@_Context@details@Concurrency@@SAXXZ() msvcr120.?_Yield@_Context@details@Concurrency@@SAXXZ
|
||||
@ stub -arch=arm ?cancel@agent@Concurrency@@QAA_NXZ
|
||||
@ stub -arch=i386 ?cancel@agent@Concurrency@@QAE_NXZ
|
||||
@ stub -arch=win64 ?cancel@agent@Concurrency@@QEAA_NXZ
|
||||
@ stub ?current@location@Concurrency@@SA?AV12@XZ
|
||||
@ stub -arch=arm ?done@agent@Concurrency@@IAA_NXZ
|
||||
@ stub -arch=i386 ?done@agent@Concurrency@@IAE_NXZ
|
||||
@ stub -arch=win64 ?done@agent@Concurrency@@IEAA_NXZ
|
||||
@ stub ?from_numa_node@location@Concurrency@@SA?AV12@G@Z
|
||||
@ cdecl -arch=arm ?get_error_code@scheduler_resource_allocation_error@Concurrency@@QBAJXZ(ptr) msvcr120.?get_error_code@scheduler_resource_allocation_error@Concurrency@@QBAJXZ
|
||||
@ thiscall -arch=i386 ?get_error_code@scheduler_resource_allocation_error@Concurrency@@QBEJXZ(ptr) msvcr120.?get_error_code@scheduler_resource_allocation_error@Concurrency@@QBEJXZ
|
||||
@ cdecl -arch=win64 ?get_error_code@scheduler_resource_allocation_error@Concurrency@@QEBAJXZ(ptr) msvcr120.?get_error_code@scheduler_resource_allocation_error@Concurrency@@QEBAJXZ
|
||||
@ cdecl ?is_current_task_group_canceling@Concurrency@@YA_NXZ() msvcp120.?is_current_task_group_canceling@Concurrency@@YA_NXZ
|
||||
@ cdecl -arch=arm ?lock@critical_section@Concurrency@@QAAXXZ(ptr) msvcr120.?lock@critical_section@Concurrency@@QAAXXZ
|
||||
@ thiscall -arch=i386 ?lock@critical_section@Concurrency@@QAEXXZ(ptr) msvcr120.?lock@critical_section@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=win64 ?lock@critical_section@Concurrency@@QEAAXXZ(ptr) msvcr120.?lock@critical_section@Concurrency@@QEAAXXZ
|
||||
@ thiscall -arch=win32 ?lock@reader_writer_lock@Concurrency@@QAEXXZ(ptr) msvcr120.?lock@reader_writer_lock@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=arm ?lock@reader_writer_lock@Concurrency@@QAAXXZ(ptr) msvcr120.?lock@reader_writer_lock@Concurrency@@QAAXXZ
|
||||
@ thiscall -arch=i386 ?lock@reader_writer_lock@Concurrency@@QAEXXZ(ptr) msvcr120.?lock@reader_writer_lock@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=win64 ?lock@reader_writer_lock@Concurrency@@QEAAXXZ(ptr) msvcr120.?lock@reader_writer_lock@Concurrency@@QEAAXXZ
|
||||
@ thiscall -arch=win32 ?lock_read@reader_writer_lock@Concurrency@@QAEXXZ(ptr) msvcr120.?lock_read@reader_writer_lock@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=arm ?lock_read@reader_writer_lock@Concurrency@@QAAXXZ(ptr) msvcr120.?lock_read@reader_writer_lock@Concurrency@@QAAXXZ
|
||||
@ thiscall -arch=i386 ?lock_read@reader_writer_lock@Concurrency@@QAEXXZ(ptr) msvcr120.?lock_read@reader_writer_lock@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=win64 ?lock_read@reader_writer_lock@Concurrency@@QEAAXXZ(ptr) msvcr120.?lock_read@reader_writer_lock@Concurrency@@QEAAXXZ
|
||||
@ cdecl -arch=arm ?native_handle@critical_section@Concurrency@@QAAAAV12@XZ(ptr) msvcr120.?native_handle@critical_section@Concurrency@@QAAAAV12@XZ
|
||||
@ thiscall -arch=i386 ?native_handle@critical_section@Concurrency@@QAEAAV12@XZ(ptr) msvcr120.?native_handle@critical_section@Concurrency@@QAEAAV12@XZ
|
||||
@ cdecl -arch=win64 ?native_handle@critical_section@Concurrency@@QEAAAEAV12@XZ(ptr) msvcr120.?native_handle@critical_section@Concurrency@@QEAAAEAV12@XZ
|
||||
@ cdecl -arch=arm ?notify_all@_Condition_variable@details@Concurrency@@QAAXXZ(ptr) msvcr120.?notify_all@_Condition_variable@details@Concurrency@@QAAXXZ
|
||||
@ thiscall -arch=i386 ?notify_all@_Condition_variable@details@Concurrency@@QAEXXZ(ptr) msvcr120.?notify_all@_Condition_variable@details@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=win64 ?notify_all@_Condition_variable@details@Concurrency@@QEAAXXZ(ptr) msvcr120.?notify_all@_Condition_variable@details@Concurrency@@QEAAXXZ
|
||||
@ cdecl -arch=arm ?notify_one@_Condition_variable@details@Concurrency@@QAAXXZ(ptr) msvcr120.?notify_one@_Condition_variable@details@Concurrency@@QAAXXZ
|
||||
@ thiscall -arch=i386 ?notify_one@_Condition_variable@details@Concurrency@@QAEXXZ(ptr) msvcr120.?notify_one@_Condition_variable@details@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=win64 ?notify_one@_Condition_variable@details@Concurrency@@QEAAXXZ(ptr) msvcr120.?notify_one@_Condition_variable@details@Concurrency@@QEAAXXZ
|
||||
@ thiscall -arch=win32 ?reset@event@Concurrency@@QAEXXZ(ptr) msvcr120.?reset@event@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=arm ?reset@event@Concurrency@@QAAXXZ(ptr) msvcr120.?reset@event@Concurrency@@QAAXXZ
|
||||
@ thiscall -arch=i386 ?reset@event@Concurrency@@QAEXXZ(ptr) msvcr120.?reset@event@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=win64 ?reset@event@Concurrency@@QEAAXXZ(ptr) msvcr120.?reset@event@Concurrency@@QEAAXXZ
|
||||
@ thiscall -arch=win32 ?set@event@Concurrency@@QAEXXZ(ptr) msvcr120.?set@event@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=arm ?set@event@Concurrency@@QAAXXZ(ptr) msvcr120.?set@event@Concurrency@@QAAXXZ
|
||||
@ thiscall -arch=i386 ?set@event@Concurrency@@QAEXXZ(ptr) msvcr120.?set@event@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=win64 ?set@event@Concurrency@@QEAAXXZ(ptr) msvcr120.?set@event@Concurrency@@QEAAXXZ
|
||||
@ stub -arch=win32 ?set_task_execution_resources@Concurrency@@YAXGPAU_GROUP_AFFINITY@@@Z
|
||||
@ stub -arch=win64 ?set_task_execution_resources@Concurrency@@YAXGPEAU_GROUP_AFFINITY@@@Z
|
||||
@ stub -arch=win32 ?set_task_execution_resources@Concurrency@@YAXK@Z
|
||||
@ stub -arch=win64 ?set_task_execution_resources@Concurrency@@YAX_K@Z
|
||||
@ stub -arch=arm ?start@agent@Concurrency@@QAA_NXZ
|
||||
@ stub -arch=i386 ?start@agent@Concurrency@@QAE_NXZ
|
||||
@ stub -arch=win64 ?start@agent@Concurrency@@QEAA_NXZ
|
||||
@ stub -arch=arm ?status@agent@Concurrency@@QAA?AW4agent_status@2@XZ
|
||||
@ stub -arch=i386 ?status@agent@Concurrency@@QAE?AW4agent_status@2@XZ
|
||||
@ stub -arch=win64 ?status@agent@Concurrency@@QEAA?AW4agent_status@2@XZ
|
||||
@ stub -arch=arm ?status_port@agent@Concurrency@@QAAPAV?$ISource@W4agent_status@Concurrency@@@2@XZ
|
||||
@ stub -arch=i386 ?status_port@agent@Concurrency@@QAEPAV?$ISource@W4agent_status@Concurrency@@@2@XZ
|
||||
@ stub -arch=win64 ?status_port@agent@Concurrency@@QEAAPEAV?$ISource@W4agent_status@Concurrency@@@2@XZ
|
||||
@ cdecl -arch=arm ?try_lock@critical_section@Concurrency@@QAA_NXZ(ptr) msvcr120.?try_lock@critical_section@Concurrency@@QAA_NXZ
|
||||
@ thiscall -arch=i386 ?try_lock@critical_section@Concurrency@@QAE_NXZ(ptr) msvcr120.?try_lock@critical_section@Concurrency@@QAE_NXZ
|
||||
@ cdecl -arch=win64 ?try_lock@critical_section@Concurrency@@QEAA_NXZ(ptr) msvcr120.?try_lock@critical_section@Concurrency@@QEAA_NXZ
|
||||
@ thiscall -arch=win32 ?try_lock@reader_writer_lock@Concurrency@@QAE_NXZ(ptr) msvcr120.?try_lock@reader_writer_lock@Concurrency@@QAE_NXZ
|
||||
@ cdecl -arch=arm ?try_lock@reader_writer_lock@Concurrency@@QAA_NXZ(ptr) msvcr120.?try_lock@reader_writer_lock@Concurrency@@QAA_NXZ
|
||||
@ thiscall -arch=i386 ?try_lock@reader_writer_lock@Concurrency@@QAE_NXZ(ptr) msvcr120.?try_lock@reader_writer_lock@Concurrency@@QAE_NXZ
|
||||
@ cdecl -arch=win64 ?try_lock@reader_writer_lock@Concurrency@@QEAA_NXZ(ptr) msvcr120.?try_lock@reader_writer_lock@Concurrency@@QEAA_NXZ
|
||||
@ cdecl -arch=arm ?try_lock_for@critical_section@Concurrency@@QAA_NI@Z(ptr long) msvcr120.?try_lock_for@critical_section@Concurrency@@QAA_NI@Z
|
||||
@ thiscall -arch=i386 ?try_lock_for@critical_section@Concurrency@@QAE_NI@Z(ptr long) msvcr120.?try_lock_for@critical_section@Concurrency@@QAE_NI@Z
|
||||
@ cdecl -arch=win64 ?try_lock_for@critical_section@Concurrency@@QEAA_NI@Z(ptr long) msvcr120.?try_lock_for@critical_section@Concurrency@@QEAA_NI@Z
|
||||
@ thiscall -arch=win32 ?try_lock_read@reader_writer_lock@Concurrency@@QAE_NXZ(ptr) msvcr120.?try_lock_read@reader_writer_lock@Concurrency@@QAE_NXZ
|
||||
@ cdecl -arch=arm ?try_lock_read@reader_writer_lock@Concurrency@@QAA_NXZ(ptr) msvcr120.?try_lock_read@reader_writer_lock@Concurrency@@QAA_NXZ
|
||||
@ thiscall -arch=i386 ?try_lock_read@reader_writer_lock@Concurrency@@QAE_NXZ(ptr) msvcr120.?try_lock_read@reader_writer_lock@Concurrency@@QAE_NXZ
|
||||
@ cdecl -arch=win64 ?try_lock_read@reader_writer_lock@Concurrency@@QEAA_NXZ(ptr) msvcr120.?try_lock_read@reader_writer_lock@Concurrency@@QEAA_NXZ
|
||||
@ cdecl -arch=arm ?unlock@critical_section@Concurrency@@QAAXXZ(ptr) msvcr120.?unlock@critical_section@Concurrency@@QAAXXZ
|
||||
@ thiscall -arch=i386 ?unlock@critical_section@Concurrency@@QAEXXZ(ptr) msvcr120.?unlock@critical_section@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=win64 ?unlock@critical_section@Concurrency@@QEAAXXZ(ptr) msvcr120.?unlock@critical_section@Concurrency@@QEAAXXZ
|
||||
@ thiscall -arch=win32 ?unlock@reader_writer_lock@Concurrency@@QAEXXZ(ptr) msvcr120.?unlock@reader_writer_lock@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=arm ?unlock@reader_writer_lock@Concurrency@@QAAXXZ(ptr) msvcr120.?unlock@reader_writer_lock@Concurrency@@QAAXXZ
|
||||
@ thiscall -arch=i386 ?unlock@reader_writer_lock@Concurrency@@QAEXXZ(ptr) msvcr120.?unlock@reader_writer_lock@Concurrency@@QAEXXZ
|
||||
@ cdecl -arch=win64 ?unlock@reader_writer_lock@Concurrency@@QEAAXXZ(ptr) msvcr120.?unlock@reader_writer_lock@Concurrency@@QEAAXXZ
|
||||
@ cdecl ?wait@Concurrency@@YAXI@Z(long) msvcr120.?wait@Concurrency@@YAXI@Z
|
||||
@ cdecl -arch=arm ?wait@_Condition_variable@details@Concurrency@@QAAXAAVcritical_section@3@@Z(ptr ptr) msvcr120.?wait@_Condition_variable@details@Concurrency@@QAAXAAVcritical_section@3@@Z
|
||||
@ thiscall -arch=i386 ?wait@_Condition_variable@details@Concurrency@@QAEXAAVcritical_section@3@@Z(ptr ptr) msvcr120.?wait@_Condition_variable@details@Concurrency@@QAEXAAVcritical_section@3@@Z
|
||||
@ cdecl -arch=win64 ?wait@_Condition_variable@details@Concurrency@@QEAAXAEAVcritical_section@3@@Z(ptr ptr) msvcr120.?wait@_Condition_variable@details@Concurrency@@QEAAXAEAVcritical_section@3@@Z
|
||||
@ stub -arch=win32 ?wait@agent@Concurrency@@SA?AW4agent_status@2@PAV12@I@Z
|
||||
@ stub -arch=win64 ?wait@agent@Concurrency@@SA?AW4agent_status@2@PEAV12@I@Z
|
||||
@ thiscall -arch=win32 ?wait@event@Concurrency@@QAEII@Z(ptr long) msvcr120.?wait@event@Concurrency@@QAEII@Z
|
||||
@ cdecl -arch=arm ?wait@event@Concurrency@@QAAII@Z(ptr long) msvcr120.?wait@event@Concurrency@@QAAII@Z
|
||||
@ thiscall -arch=i386 ?wait@event@Concurrency@@QAEII@Z(ptr long) msvcr120.?wait@event@Concurrency@@QAEII@Z
|
||||
@ cdecl -arch=win64 ?wait@event@Concurrency@@QEAA_KI@Z(ptr long) msvcr120.?wait@event@Concurrency@@QEAA_KI@Z
|
||||
@ cdecl -arch=arm ?wait_for@_Condition_variable@details@Concurrency@@QAA_NAAVcritical_section@3@I@Z(ptr ptr long) msvcr120.?wait_for@_Condition_variable@details@Concurrency@@QAA_NAAVcritical_section@3@I@Z
|
||||
@ thiscall -arch=i386 ?wait_for@_Condition_variable@details@Concurrency@@QAE_NAAVcritical_section@3@I@Z(ptr ptr long) msvcr120.?wait_for@_Condition_variable@details@Concurrency@@QAE_NAAVcritical_section@3@I@Z
|
||||
@ cdecl -arch=win64 ?wait_for@_Condition_variable@details@Concurrency@@QEAA_NAEAVcritical_section@3@I@Z(ptr ptr long) msvcr120.?wait_for@_Condition_variable@details@Concurrency@@QEAA_NAEAVcritical_section@3@I@Z
|
||||
@ stub -arch=win32 ?wait_for_all@agent@Concurrency@@SAXIPAPAV12@PAW4agent_status@2@I@Z
|
||||
|
|
|
@ -2689,11 +2689,94 @@ done:
|
|||
return !status;
|
||||
}
|
||||
|
||||
static BOOL CNG_ImportPubKey(CERT_PUBLIC_KEY_INFO *pubKeyInfo, BCRYPT_KEY_HANDLE *key)
|
||||
static BOOL CNG_ImportRSAPubKey(CERT_PUBLIC_KEY_INFO *info, BCRYPT_KEY_HANDLE *key)
|
||||
{
|
||||
DWORD size, modulus_len, i;
|
||||
BLOBHEADER *hdr;
|
||||
RSAPUBKEY *rsapubkey;
|
||||
const WCHAR *rsa_algo;
|
||||
BCRYPT_ALG_HANDLE alg = NULL;
|
||||
BCRYPT_RSAKEY_BLOB *rsakey;
|
||||
BYTE *s, *d;
|
||||
NTSTATUS status;
|
||||
|
||||
if (!info->PublicKey.cbData)
|
||||
{
|
||||
SetLastError(NTE_BAD_ALGID);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!CryptDecodeObjectEx(X509_ASN_ENCODING, RSA_CSP_PUBLICKEYBLOB, info->PublicKey.pbData,
|
||||
info->PublicKey.cbData, CRYPT_DECODE_ALLOC_FLAG, NULL, &hdr, &size))
|
||||
{
|
||||
WARN("CryptDecodeObjectEx failed\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (hdr->aiKeyAlg == CALG_RSA_KEYX)
|
||||
rsa_algo = BCRYPT_RSA_ALGORITHM;
|
||||
else if (hdr->aiKeyAlg == CALG_RSA_SIGN)
|
||||
rsa_algo = BCRYPT_RSA_SIGN_ALGORITHM;
|
||||
else
|
||||
{
|
||||
FIXME("Unsupported RSA algorithm: %#x\n", hdr->aiKeyAlg);
|
||||
CryptMemFree(hdr);
|
||||
SetLastError(NTE_BAD_ALGID);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ((status = BCryptOpenAlgorithmProvider(&alg, rsa_algo, NULL, 0)))
|
||||
goto done;
|
||||
|
||||
rsapubkey = (RSAPUBKEY *)(hdr + 1);
|
||||
|
||||
modulus_len = size - sizeof(*hdr) - sizeof(*rsapubkey);
|
||||
if (modulus_len != rsapubkey->bitlen / 8)
|
||||
FIXME("RSA pubkey has wrong modulus_len %u\n", modulus_len);
|
||||
|
||||
size = sizeof(*rsakey) + sizeof(ULONG) + modulus_len;
|
||||
|
||||
if (!(rsakey = CryptMemAlloc(size)))
|
||||
{
|
||||
status = STATUS_NO_MEMORY;
|
||||
goto done;
|
||||
}
|
||||
|
||||
rsakey->Magic = BCRYPT_RSAPUBLIC_MAGIC;
|
||||
rsakey->BitLength = rsapubkey->bitlen;
|
||||
rsakey->cbPublicExp = sizeof(ULONG);
|
||||
rsakey->cbModulus = modulus_len;
|
||||
rsakey->cbPrime1 = 0;
|
||||
rsakey->cbPrime2 = 0;
|
||||
|
||||
d = (BYTE *)(rsakey + 1);
|
||||
/* According to MSDN modulus and pubexp are in LE while
|
||||
* BCRYPT_RSAKEY_BLOB is supposed to have them in BE format */
|
||||
*(ULONG *)d = RtlUlongByteSwap(rsapubkey->pubexp);
|
||||
d += sizeof(ULONG);
|
||||
s = (BYTE *)(rsapubkey + 1);
|
||||
for (i = 0; i < modulus_len; i++)
|
||||
d[i] = s[modulus_len - i - 1];
|
||||
|
||||
status = BCryptImportKeyPair(alg, NULL, BCRYPT_RSAPUBLIC_BLOB, key, (BYTE *)rsakey, size, 0);
|
||||
CryptMemFree(rsakey);
|
||||
|
||||
done:
|
||||
CryptMemFree(hdr);
|
||||
if (alg) BCryptCloseAlgorithmProvider(alg, 0);
|
||||
if (status) SetLastError(RtlNtStatusToDosError(status));
|
||||
return !status;
|
||||
}
|
||||
|
||||
BOOL CNG_ImportPubKey(CERT_PUBLIC_KEY_INFO *pubKeyInfo, BCRYPT_KEY_HANDLE *key)
|
||||
{
|
||||
if (!strcmp(pubKeyInfo->Algorithm.pszObjId, szOID_ECC_PUBLIC_KEY))
|
||||
return CNG_ImportECCPubKey(pubKeyInfo, key);
|
||||
|
||||
|
||||
if (!strcmp(pubKeyInfo->Algorithm.pszObjId, szOID_RSA_RSA))
|
||||
return CNG_ImportRSAPubKey(pubKeyInfo, key);
|
||||
|
||||
FIXME("Unsupported public key type: %s\n", debugstr_a(pubKeyInfo->Algorithm.pszObjId));
|
||||
SetLastError(NTE_BAD_ALGID);
|
||||
return FALSE;
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
|
||||
#include "wine/list.h"
|
||||
|
||||
BOOL CNG_ImportPubKey(CERT_PUBLIC_KEY_INFO *pubKeyInfo, BCRYPT_KEY_HANDLE *key) DECLSPEC_HIDDEN;
|
||||
|
||||
/* a few asn.1 tags we need */
|
||||
#define ASN_BOOL (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x01)
|
||||
#define ASN_BITSTRING (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x03)
|
||||
|
|
|
@ -5050,8 +5050,11 @@ BOOL WINAPI CryptImportPublicKeyInfoEx2(DWORD dwCertEncodingType,
|
|||
PCERT_PUBLIC_KEY_INFO pInfo, DWORD dwFlags, void *pvAuxInfo,
|
||||
BCRYPT_KEY_HANDLE *phKey)
|
||||
{
|
||||
FIXME_(crypt)("(%d, %p, %08x, %p, %p): stub\n", dwCertEncodingType, pInfo,
|
||||
TRACE_(crypt)("(%d, %p, %08x, %p, %p)\n", dwCertEncodingType, pInfo,
|
||||
dwFlags, pvAuxInfo, phKey);
|
||||
SetLastError(ERROR_FILE_NOT_FOUND);
|
||||
return FALSE;
|
||||
|
||||
if (dwFlags)
|
||||
FIXME("flags %#x ignored\n", dwFlags);
|
||||
|
||||
return CNG_ImportPubKey(pInfo, phKey);
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
|
||||
static BOOL (WINAPI *pCryptDecodeObjectEx)(DWORD,LPCSTR,const BYTE*,DWORD,DWORD,PCRYPT_DECODE_PARA,void*,DWORD*);
|
||||
static BOOL (WINAPI *pCryptEncodeObjectEx)(DWORD,LPCSTR,const void*,DWORD,PCRYPT_ENCODE_PARA,void*,DWORD*);
|
||||
static DWORD (WINAPI *pBCryptDestroyKey)(BCRYPT_KEY_HANDLE);
|
||||
|
||||
struct encodedInt
|
||||
{
|
||||
|
@ -8400,6 +8401,7 @@ static void testImportPublicKey(HCRYPTPROV csp, PCERT_PUBLIC_KEY_INFO info)
|
|||
{
|
||||
BOOL ret;
|
||||
HCRYPTKEY key;
|
||||
BCRYPT_KEY_HANDLE key2;
|
||||
PCCERT_CONTEXT context;
|
||||
DWORD dwSize;
|
||||
ALG_ID ai;
|
||||
|
@ -8469,6 +8471,12 @@ static void testImportPublicKey(HCRYPTPROV csp, PCERT_PUBLIC_KEY_INFO info)
|
|||
&context->pCertInfo->SubjectPublicKeyInfo, 0, 0, NULL, &key);
|
||||
ok(ret, "CryptImportPublicKeyInfoEx failed: %08x\n", GetLastError());
|
||||
CryptDestroyKey(key);
|
||||
|
||||
ret = CryptImportPublicKeyInfoEx2(X509_ASN_ENCODING,
|
||||
&context->pCertInfo->SubjectPublicKeyInfo, 0, NULL, &key2);
|
||||
ok(ret, "CryptImportPublicKeyInfoEx2 failed: %08x\n", GetLastError());
|
||||
if (pBCryptDestroyKey) pBCryptDestroyKey(key2);
|
||||
|
||||
CertFreeCertificateContext(context);
|
||||
}
|
||||
}
|
||||
|
@ -8502,7 +8510,7 @@ START_TEST(encode)
|
|||
{
|
||||
static const DWORD encodings[] = { X509_ASN_ENCODING, PKCS_7_ASN_ENCODING,
|
||||
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING };
|
||||
HMODULE hCrypt32;
|
||||
HMODULE hCrypt32, hBcrypt;
|
||||
DWORD i;
|
||||
|
||||
hCrypt32 = GetModuleHandleA("crypt32.dll");
|
||||
|
@ -8514,6 +8522,9 @@ START_TEST(encode)
|
|||
return;
|
||||
}
|
||||
|
||||
hBcrypt = GetModuleHandleA("bcrypt.dll");
|
||||
pBCryptDestroyKey = (void*)GetProcAddress(hBcrypt, "BCryptDestroyKey");
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(encodings); i++)
|
||||
{
|
||||
test_encodeInt(encodings[i]);
|
||||
|
|
|
@ -1155,6 +1155,7 @@ static void STDMETHODCALLTYPE d2d_device_context_DrawText(ID2D1DeviceContext *if
|
|||
IDWriteTextLayout *text_layout;
|
||||
IDWriteFactory *dwrite_factory;
|
||||
D2D1_POINT_2F origin;
|
||||
float width, height;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("iface %p, string %s, string_len %u, text_format %p, layout_rect %s, "
|
||||
|
@ -1169,13 +1170,15 @@ static void STDMETHODCALLTYPE d2d_device_context_DrawText(ID2D1DeviceContext *if
|
|||
return;
|
||||
}
|
||||
|
||||
width = max(0.0f, layout_rect->right - layout_rect->left);
|
||||
height = max(0.0f, layout_rect->bottom - layout_rect->top);
|
||||
if (measuring_mode == DWRITE_MEASURING_MODE_NATURAL)
|
||||
hr = IDWriteFactory_CreateTextLayout(dwrite_factory, string, string_len, text_format,
|
||||
layout_rect->right - layout_rect->left, layout_rect->bottom - layout_rect->top, &text_layout);
|
||||
width, height, &text_layout);
|
||||
else
|
||||
hr = IDWriteFactory_CreateGdiCompatibleTextLayout(dwrite_factory, string, string_len, text_format,
|
||||
layout_rect->right - layout_rect->left, layout_rect->bottom - layout_rect->top, render_target->desc.dpiX / 96.0f,
|
||||
(DWRITE_MATRIX*)&render_target->drawing_state.transform, measuring_mode == DWRITE_MEASURING_MODE_GDI_NATURAL, &text_layout);
|
||||
width, height, render_target->desc.dpiX / 96.0f, (DWRITE_MATRIX *)&render_target->drawing_state.transform,
|
||||
measuring_mode == DWRITE_MEASURING_MODE_GDI_NATURAL, &text_layout);
|
||||
IDWriteFactory_Release(dwrite_factory);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
|
@ -1183,7 +1186,7 @@ static void STDMETHODCALLTYPE d2d_device_context_DrawText(ID2D1DeviceContext *if
|
|||
return;
|
||||
}
|
||||
|
||||
d2d_point_set(&origin, layout_rect->left, layout_rect->top);
|
||||
d2d_point_set(&origin, min(layout_rect->left, layout_rect->right), min(layout_rect->top, layout_rect->bottom));
|
||||
ID2D1DeviceContext_DrawTextLayout(iface, origin, text_layout, brush, options);
|
||||
IDWriteTextLayout_Release(text_layout);
|
||||
}
|
||||
|
|
|
@ -2937,8 +2937,10 @@ static void test_create_rendertarget_view(void)
|
|||
|
||||
if (!enable_debug_layer)
|
||||
{
|
||||
rtview = (void *)0xdeadbeef;
|
||||
hr = ID3D10Device_CreateRenderTargetView(device, NULL, &rtv_desc, &rtview);
|
||||
ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
|
||||
ok(!rtview, "Unexpected pointer %p.\n", rtview);
|
||||
}
|
||||
|
||||
expected_refcount = get_refcount(device) + 1;
|
||||
|
@ -3055,8 +3057,10 @@ static void test_create_rendertarget_view(void)
|
|||
}
|
||||
|
||||
get_rtv_desc(&rtv_desc, &invalid_desc_tests[i].rtv_desc);
|
||||
rtview = (void *)0xdeadbeef;
|
||||
hr = ID3D10Device_CreateRenderTargetView(device, texture, &rtv_desc, &rtview);
|
||||
ok(hr == E_INVALIDARG, "Test %u: Got unexpected hr %#x.\n", i, hr);
|
||||
ok(!rtview, "Unexpected pointer %p.\n", rtview);
|
||||
|
||||
ID3D10Resource_Release(texture);
|
||||
}
|
||||
|
|
|
@ -516,6 +516,18 @@ struct d3d_query *unsafe_impl_from_ID3D11Query(ID3D11Query *iface) DECLSPEC_HIDD
|
|||
struct d3d_query *unsafe_impl_from_ID3D10Query(ID3D10Query *iface) DECLSPEC_HIDDEN;
|
||||
struct d3d_query *unsafe_impl_from_ID3D11Asynchronous(ID3D11Asynchronous *iface) DECLSPEC_HIDDEN;
|
||||
|
||||
/* ID3DDeviceContextState */
|
||||
struct d3d_device_context_state
|
||||
{
|
||||
ID3DDeviceContextState ID3DDeviceContextState_iface;
|
||||
LONG refcount;
|
||||
|
||||
struct wined3d_private_store private_store;
|
||||
|
||||
GUID emulated_interface;
|
||||
ID3D11Device2 *device;
|
||||
};
|
||||
|
||||
/* ID3D11DeviceContext - immediate context */
|
||||
struct d3d11_immediate_context
|
||||
{
|
||||
|
|
|
@ -29,6 +29,127 @@ static const struct wined3d_parent_ops d3d_null_wined3d_parent_ops =
|
|||
d3d_null_wined3d_object_destroyed,
|
||||
};
|
||||
|
||||
/* ID3DDeviceContextState methods */
|
||||
|
||||
static inline struct d3d_device_context_state *impl_from_ID3DDeviceContextState(ID3DDeviceContextState *iface)
|
||||
{
|
||||
return CONTAINING_RECORD(iface, struct d3d_device_context_state, ID3DDeviceContextState_iface);
|
||||
}
|
||||
|
||||
static HRESULT STDMETHODCALLTYPE d3d_device_context_state_QueryInterface(ID3DDeviceContextState *iface,
|
||||
REFIID iid, void **out)
|
||||
{
|
||||
TRACE("iface %p, iid %s, out %p.\n", iface, debugstr_guid(iid), out);
|
||||
|
||||
if (IsEqualGUID(iid, &IID_ID3DDeviceContextState)
|
||||
|| IsEqualGUID(iid, &IID_ID3D11DeviceChild)
|
||||
|| IsEqualGUID(iid, &IID_IUnknown))
|
||||
{
|
||||
ID3DDeviceContextState_AddRef(iface);
|
||||
*out = iface;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid));
|
||||
*out = NULL;
|
||||
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
static ULONG STDMETHODCALLTYPE d3d_device_context_state_AddRef(ID3DDeviceContextState *iface)
|
||||
{
|
||||
struct d3d_device_context_state *state = impl_from_ID3DDeviceContextState(iface);
|
||||
ULONG refcount = InterlockedIncrement(&state->refcount);
|
||||
|
||||
TRACE("%p increasing refcount to %u.\n", state, refcount);
|
||||
|
||||
return refcount;
|
||||
}
|
||||
|
||||
static ULONG STDMETHODCALLTYPE d3d_device_context_state_Release(ID3DDeviceContextState *iface)
|
||||
{
|
||||
struct d3d_device_context_state *state = impl_from_ID3DDeviceContextState(iface);
|
||||
ULONG refcount = InterlockedDecrement(&state->refcount);
|
||||
|
||||
TRACE("%p decreasing refcount to %u.\n", state, refcount);
|
||||
|
||||
if (!refcount)
|
||||
{
|
||||
wined3d_private_store_cleanup(&state->private_store);
|
||||
ID3D11Device2_Release(state->device);
|
||||
heap_free(state);
|
||||
}
|
||||
|
||||
return refcount;
|
||||
}
|
||||
|
||||
static void STDMETHODCALLTYPE d3d_device_context_state_GetDevice(ID3DDeviceContextState *iface, ID3D11Device **device)
|
||||
{
|
||||
struct d3d_device_context_state *state = impl_from_ID3DDeviceContextState(iface);
|
||||
|
||||
TRACE("iface %p, device %p.\n", iface, device);
|
||||
|
||||
*device = (ID3D11Device *)state->device;
|
||||
ID3D11Device_AddRef(*device);
|
||||
}
|
||||
|
||||
static HRESULT STDMETHODCALLTYPE d3d_device_context_state_GetPrivateData(ID3DDeviceContextState *iface, REFGUID guid,
|
||||
UINT *data_size, void *data)
|
||||
{
|
||||
struct d3d_device_context_state *state = impl_from_ID3DDeviceContextState(iface);
|
||||
|
||||
TRACE("iface %p, guid %s, data_size %p, data %p.\n", iface, debugstr_guid(guid), data_size, data);
|
||||
|
||||
return d3d_get_private_data(&state->private_store, guid, data_size, data);
|
||||
}
|
||||
|
||||
static HRESULT STDMETHODCALLTYPE d3d_device_context_state_SetPrivateData(ID3DDeviceContextState *iface, REFGUID guid,
|
||||
UINT data_size, const void *data)
|
||||
{
|
||||
struct d3d_device_context_state *state = impl_from_ID3DDeviceContextState(iface);
|
||||
|
||||
TRACE("iface %p, guid %s, data_size %u, data %p.\n", iface, debugstr_guid(guid), data_size, data);
|
||||
|
||||
return d3d_set_private_data(&state->private_store, guid, data_size, data);
|
||||
}
|
||||
|
||||
static HRESULT STDMETHODCALLTYPE d3d_device_context_state_SetPrivateDataInterface(ID3DDeviceContextState *iface,
|
||||
REFGUID guid, const IUnknown *data)
|
||||
{
|
||||
struct d3d_device_context_state *state = impl_from_ID3DDeviceContextState(iface);
|
||||
|
||||
TRACE("iface %p, guid %s, data %p.\n", iface, debugstr_guid(guid), data);
|
||||
|
||||
return d3d_set_private_data_interface(&state->private_store, guid, data);
|
||||
}
|
||||
|
||||
static const struct ID3DDeviceContextStateVtbl d3d_device_context_state_vtbl =
|
||||
{
|
||||
/* IUnknown methods */
|
||||
d3d_device_context_state_QueryInterface,
|
||||
d3d_device_context_state_AddRef,
|
||||
d3d_device_context_state_Release,
|
||||
/* ID3D11DeviceChild methods */
|
||||
d3d_device_context_state_GetDevice,
|
||||
d3d_device_context_state_GetPrivateData,
|
||||
d3d_device_context_state_SetPrivateData,
|
||||
d3d_device_context_state_SetPrivateDataInterface,
|
||||
/* ID3DDeviceContextState methods */
|
||||
};
|
||||
|
||||
static void d3d_device_context_state_init(struct d3d_device_context_state *state, struct d3d_device *device,
|
||||
REFIID emulated_interface)
|
||||
{
|
||||
state->ID3DDeviceContextState_iface.lpVtbl = &d3d_device_context_state_vtbl;
|
||||
state->refcount = 1;
|
||||
|
||||
wined3d_private_store_init(&state->private_store);
|
||||
|
||||
state->emulated_interface = *emulated_interface;
|
||||
state->device = &device->ID3D11Device2_iface;
|
||||
ID3D11Device2_AddRef(state->device);
|
||||
}
|
||||
|
||||
/* ID3D11DeviceContext - immediate context methods */
|
||||
|
||||
static inline struct d3d11_immediate_context *impl_from_ID3D11DeviceContext1(ID3D11DeviceContext1 *iface)
|
||||
|
@ -2933,6 +3054,8 @@ static HRESULT STDMETHODCALLTYPE d3d11_device_CreateRenderTargetView(ID3D11Devic
|
|||
|
||||
TRACE("iface %p, resource %p, desc %p, view %p.\n", iface, resource, desc, view);
|
||||
|
||||
*view = NULL;
|
||||
|
||||
if (!resource)
|
||||
return E_INVALIDARG;
|
||||
|
||||
|
@ -3738,11 +3861,28 @@ static HRESULT STDMETHODCALLTYPE d3d11_device_CreateDeviceContextState(ID3D11Dev
|
|||
const D3D_FEATURE_LEVEL *feature_levels, UINT feature_levels_count, UINT sdk_version,
|
||||
REFIID emulated_interface, D3D_FEATURE_LEVEL *chosen_feature_level, ID3DDeviceContextState **state)
|
||||
{
|
||||
struct d3d_device *device = impl_from_ID3D11Device2(iface);
|
||||
struct d3d_device_context_state *state_impl;
|
||||
|
||||
FIXME("iface %p, flags %#x, feature_levels %p, feature_level_count %u, sdk_version %u, "
|
||||
"emulated_interface %s, chosen_feature_level %p, state %p stub!\n", iface, flags, feature_levels,
|
||||
"emulated_interface %s, chosen_feature_level %p, state %p semi-stub!\n", iface, flags, feature_levels,
|
||||
feature_levels_count, sdk_version, debugstr_guid(emulated_interface), chosen_feature_level, state);
|
||||
|
||||
return E_NOTIMPL;
|
||||
if (chosen_feature_level)
|
||||
FIXME("Device context state feature level not implemented yet.\n");
|
||||
|
||||
if (state)
|
||||
{
|
||||
*state = NULL;
|
||||
if (!(state_impl = heap_alloc(sizeof(*state_impl))))
|
||||
return E_OUTOFMEMORY;
|
||||
d3d_device_context_state_init(state_impl, device, emulated_interface);
|
||||
*state = &state_impl->ID3DDeviceContextState_iface;
|
||||
}
|
||||
|
||||
device->d3d11_only = FALSE;
|
||||
if (chosen_feature_level) *chosen_feature_level = ID3D11Device2_GetFeatureLevel(iface);
|
||||
return state ? S_OK : S_FALSE;
|
||||
}
|
||||
|
||||
static HRESULT STDMETHODCALLTYPE d3d11_device_OpenSharedResource1(ID3D11Device2 *iface, HANDLE handle,
|
||||
|
@ -5416,6 +5556,8 @@ static HRESULT STDMETHODCALLTYPE d3d10_device_CreateRenderTargetView(ID3D10Devic
|
|||
|
||||
TRACE("iface %p, resource %p, desc %p, view %p.\n", iface, resource, desc, view);
|
||||
|
||||
*view = NULL;
|
||||
|
||||
if (!resource)
|
||||
return E_INVALIDARG;
|
||||
|
||||
|
|
|
@ -3936,8 +3936,10 @@ static void test_create_rendertarget_view(void)
|
|||
|
||||
if (!enable_debug_layer)
|
||||
{
|
||||
rtview = (void *)0xdeadbeef;
|
||||
hr = ID3D11Device_CreateRenderTargetView(device, NULL, &rtv_desc, &rtview);
|
||||
ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
|
||||
ok(!rtview, "Unexpected pointer %p.\n", rtview);
|
||||
}
|
||||
|
||||
expected_refcount = get_refcount(device) + 1;
|
||||
|
@ -4054,8 +4056,10 @@ static void test_create_rendertarget_view(void)
|
|||
}
|
||||
|
||||
get_rtv_desc(&rtv_desc, &invalid_desc_tests[i].rtv_desc);
|
||||
rtview = (void *)0xdeadbeef;
|
||||
hr = ID3D11Device_CreateRenderTargetView(device, texture, &rtv_desc, &rtview);
|
||||
ok(hr == E_INVALIDARG, "Test %u: Got unexpected hr %#x.\n", i, hr);
|
||||
ok(!rtview, "Unexpected pointer %p.\n", rtview);
|
||||
|
||||
ID3D11Resource_Release(texture);
|
||||
}
|
||||
|
@ -6683,10 +6687,9 @@ static void test_device_context_state(void)
|
|||
ok(tmp_sampler == sampler, "Got sampler %p, expected %p.\n", tmp_sampler, sampler);
|
||||
ID3D11SamplerState_Release(tmp_sampler);
|
||||
|
||||
feature_level = min(feature_level, D3D_FEATURE_LEVEL_10_1);
|
||||
feature_level = min(feature_level, D3D_FEATURE_LEVEL_11_1);
|
||||
hr = ID3D11Device1_CreateDeviceContextState(device, 0, &feature_level, 1, D3D11_SDK_VERSION,
|
||||
&IID_ID3D10Device, NULL, &context_state);
|
||||
todo_wine
|
||||
&IID_ID3D11Device1, NULL, &context_state);
|
||||
ok(SUCCEEDED(hr), "Failed to create device context state, hr %#x.\n", hr);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
|
@ -6700,6 +6703,24 @@ todo_wine
|
|||
context_type = ID3D11DeviceContext1_GetType(context);
|
||||
ok(context_type == D3D11_DEVICE_CONTEXT_IMMEDIATE, "Unexpected context type %u.\n", context_type);
|
||||
|
||||
check_interface(device, &IID_ID3D10Device, TRUE, FALSE);
|
||||
check_interface(device, &IID_ID3D10Device1, TRUE, FALSE);
|
||||
check_interface(device, &IID_ID3D11Device, TRUE, FALSE);
|
||||
check_interface(device, &IID_ID3D11Device1, TRUE, FALSE);
|
||||
|
||||
refcount = ID3DDeviceContextState_Release(context_state);
|
||||
ok(!refcount, "Got refcount %u, expected 0.\n", refcount);
|
||||
|
||||
feature_level = min(feature_level, D3D_FEATURE_LEVEL_10_1);
|
||||
hr = ID3D11Device1_CreateDeviceContextState(device, 0, &feature_level, 1, D3D11_SDK_VERSION,
|
||||
&IID_ID3D10Device, NULL, &context_state);
|
||||
ok(SUCCEEDED(hr), "Failed to create device context state, hr %#x.\n", hr);
|
||||
refcount = get_refcount(context_state);
|
||||
ok(refcount == 1, "Got refcount %u, expected 1.\n", refcount);
|
||||
|
||||
context_type = ID3D11DeviceContext1_GetType(context);
|
||||
ok(context_type == D3D11_DEVICE_CONTEXT_IMMEDIATE, "Unexpected context type %u.\n", context_type);
|
||||
|
||||
cb = create_buffer((ID3D11Device *)device, D3D11_BIND_CONSTANT_BUFFER, sizeof(constant), NULL);
|
||||
|
||||
ID3D11DeviceContext1_CSSetConstantBuffers(context, 0, 1, &cb);
|
||||
|
@ -6743,73 +6764,90 @@ todo_wine
|
|||
ID3D11DeviceContext1_SwapDeviceContextState(context, context_state, &previous_context_state);
|
||||
refcount = ID3DDeviceContextState_Release(context_state);
|
||||
ok(!refcount, "Got refcount %u, expected 0.\n", refcount);
|
||||
todo_wine ok(previous_context_state != NULL, "Failed to get previous context state\n");
|
||||
|
||||
context_type = ID3D11DeviceContext1_GetType(context);
|
||||
ok(context_type == D3D11_DEVICE_CONTEXT_IMMEDIATE, "Unexpected context type %u.\n", context_type);
|
||||
|
||||
ID3D11DeviceContext1_PSSetSamplers(context, 0, 1, &sampler);
|
||||
tmp_sampler = (ID3D11SamplerState *)0xdeadbeef;
|
||||
ID3D11DeviceContext1_PSGetSamplers(context, 0, 1, &tmp_sampler);
|
||||
ok(tmp_sampler == (ID3D11SamplerState *)0xdeadbeef, "Got unexpected sampler %p.\n", tmp_sampler);
|
||||
todo_wine ok(tmp_sampler == (ID3D11SamplerState *)0xdeadbeef, "Got unexpected sampler %p.\n", tmp_sampler);
|
||||
if (tmp_sampler && tmp_sampler != (ID3D11SamplerState *)0xdeadbeef)
|
||||
ID3D11SamplerState_Release(tmp_sampler);
|
||||
if (!enable_debug_layer)
|
||||
ID3D11DeviceContext1_PSSetSamplers(context, 0, 1, &tmp_sampler);
|
||||
|
||||
ID3D11DeviceContext1_CSSetSamplers(context, 0, 1, &sampler);
|
||||
tmp_sampler = (ID3D11SamplerState *)0xdeadbeef;
|
||||
ID3D11DeviceContext1_CSGetSamplers(context, 0, 1, &tmp_sampler);
|
||||
ok(!tmp_sampler, "Got unexpected sampler %p.\n", tmp_sampler);
|
||||
todo_wine ok(!tmp_sampler, "Got unexpected sampler %p.\n", tmp_sampler);
|
||||
if (tmp_sampler) ID3D11SamplerState_Release(tmp_sampler);
|
||||
|
||||
ID3D11DeviceContext1_DSSetSamplers(context, 0, 1, &sampler);
|
||||
tmp_sampler = (ID3D11SamplerState *)0xdeadbeef;
|
||||
ID3D11DeviceContext1_DSGetSamplers(context, 0, 1, &tmp_sampler);
|
||||
ok(!tmp_sampler, "Got unexpected sampler %p.\n", tmp_sampler);
|
||||
todo_wine ok(!tmp_sampler, "Got unexpected sampler %p.\n", tmp_sampler);
|
||||
if (tmp_sampler) ID3D11SamplerState_Release(tmp_sampler);
|
||||
|
||||
ID3D11DeviceContext1_GSSetSamplers(context, 0, 1, &sampler);
|
||||
tmp_sampler = (ID3D11SamplerState *)0xdeadbeef;
|
||||
ID3D11DeviceContext1_GSGetSamplers(context, 0, 1, &tmp_sampler);
|
||||
ok(!tmp_sampler, "Got unexpected sampler %p.\n", tmp_sampler);
|
||||
todo_wine ok(!tmp_sampler, "Got unexpected sampler %p.\n", tmp_sampler);
|
||||
if (tmp_sampler) ID3D11SamplerState_Release(tmp_sampler);
|
||||
|
||||
ID3D11DeviceContext1_HSSetSamplers(context, 0, 1, &sampler);
|
||||
tmp_sampler = (ID3D11SamplerState *)0xdeadbeef;
|
||||
ID3D11DeviceContext1_HSGetSamplers(context, 0, 1, &tmp_sampler);
|
||||
ok(!tmp_sampler, "Got unexpected sampler %p.\n", tmp_sampler);
|
||||
todo_wine ok(!tmp_sampler, "Got unexpected sampler %p.\n", tmp_sampler);
|
||||
if (tmp_sampler) ID3D11SamplerState_Release(tmp_sampler);
|
||||
|
||||
ID3D11DeviceContext1_VSSetSamplers(context, 0, 1, &sampler);
|
||||
tmp_sampler = (ID3D11SamplerState *)0xdeadbeef;
|
||||
ID3D11DeviceContext1_VSGetSamplers(context, 0, 1, &tmp_sampler);
|
||||
ok(!tmp_sampler, "Got unexpected sampler %p.\n", tmp_sampler);
|
||||
|
||||
context_type = ID3D11DeviceContext1_GetType(context);
|
||||
ok(context_type == D3D11_DEVICE_CONTEXT_IMMEDIATE, "Unexpected context type %u.\n", context_type);
|
||||
todo_wine ok(!tmp_sampler, "Got unexpected sampler %p.\n", tmp_sampler);
|
||||
if (tmp_sampler) ID3D11SamplerState_Release(tmp_sampler);
|
||||
|
||||
tmp_cb = (ID3D11Buffer *)0xdeadbeef;
|
||||
ID3D11DeviceContext1_CSGetConstantBuffers(context, 0, 1, &tmp_cb);
|
||||
ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
|
||||
todo_wine ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
|
||||
if (tmp_cb) ID3D11Buffer_Release(tmp_cb);
|
||||
|
||||
tmp_cb = (ID3D11Buffer *)0xdeadbeef;
|
||||
ID3D11DeviceContext1_PSGetConstantBuffers(context, 0, 1, &tmp_cb);
|
||||
ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
|
||||
todo_wine ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
|
||||
if (tmp_cb) ID3D11Buffer_Release(tmp_cb);
|
||||
|
||||
tmp_cb = (ID3D11Buffer *)0xdeadbeef;
|
||||
ID3D11DeviceContext1_VSGetConstantBuffers(context, 0, 1, &tmp_cb);
|
||||
ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
|
||||
todo_wine ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
|
||||
if (tmp_cb) ID3D11Buffer_Release(tmp_cb);
|
||||
|
||||
tmp_cb = (ID3D11Buffer *)0xdeadbeef;
|
||||
ID3D11DeviceContext1_DSGetConstantBuffers(context, 0, 1, &tmp_cb);
|
||||
ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
|
||||
todo_wine ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
|
||||
if (tmp_cb) ID3D11Buffer_Release(tmp_cb);
|
||||
|
||||
tmp_cb = (ID3D11Buffer *)0xdeadbeef;
|
||||
ID3D11DeviceContext1_GSGetConstantBuffers(context, 0, 1, &tmp_cb);
|
||||
ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
|
||||
todo_wine ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
|
||||
if (tmp_cb) ID3D11Buffer_Release(tmp_cb);
|
||||
|
||||
tmp_cb = (ID3D11Buffer *)0xdeadbeef;
|
||||
ID3D11DeviceContext1_HSGetConstantBuffers(context, 0, 1, &tmp_cb);
|
||||
ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
|
||||
todo_wine ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
|
||||
if (tmp_cb) ID3D11Buffer_Release(tmp_cb);
|
||||
|
||||
check_interface(device, &IID_ID3D10Device, TRUE, FALSE);
|
||||
check_interface(device, &IID_ID3D10Device1, TRUE, FALSE);
|
||||
|
||||
context_state = NULL;
|
||||
ID3D11DeviceContext1_SwapDeviceContextState(context, previous_context_state, &context_state);
|
||||
refcount = ID3DDeviceContextState_Release(context_state);
|
||||
if (!context_state) refcount = 0;
|
||||
else refcount = ID3DDeviceContextState_Release(context_state);
|
||||
ok(!refcount, "Got refcount %u, expected 0.\n", refcount);
|
||||
refcount = ID3DDeviceContextState_Release(previous_context_state);
|
||||
if (!previous_context_state) refcount = 0;
|
||||
else refcount = ID3DDeviceContextState_Release(previous_context_state);
|
||||
ok(!refcount, "Got refcount %u, expected 0.\n", refcount);
|
||||
|
||||
/* ID3DDeviceContextState retains the previous state. */
|
||||
|
@ -26557,6 +26595,13 @@ static void test_format_compatibility(void)
|
|||
{DXGI_FORMAT_R16G16_SNORM, DXGI_FORMAT_R16G16_SINT, 4, TRUE},
|
||||
{DXGI_FORMAT_R16G16_SINT, DXGI_FORMAT_R16G16_TYPELESS, 4, TRUE},
|
||||
{DXGI_FORMAT_R16G16_TYPELESS, DXGI_FORMAT_R32_TYPELESS, 4, FALSE},
|
||||
{DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_R32_TYPELESS, 4, TRUE},
|
||||
{DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_R32_FLOAT, 4, TRUE},
|
||||
{DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_R32_UINT, 4, TRUE},
|
||||
{DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_R32_SINT, 4, TRUE},
|
||||
{DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_R8G8B8A8_TYPELESS, 4, FALSE},
|
||||
{DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_B8G8R8A8_TYPELESS, 4, FALSE},
|
||||
{DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_R16G16_TYPELESS, 4, FALSE},
|
||||
{DXGI_FORMAT_R32G32_TYPELESS, DXGI_FORMAT_R32G32_FLOAT, 8, TRUE},
|
||||
{DXGI_FORMAT_R32G32_FLOAT, DXGI_FORMAT_R32G32_UINT, 8, TRUE},
|
||||
{DXGI_FORMAT_R32G32_UINT, DXGI_FORMAT_R32G32_SINT, 8, TRUE},
|
||||
|
@ -26590,6 +26635,7 @@ static void test_format_compatibility(void)
|
|||
for (i = 0; i < ARRAY_SIZE(test_data); ++i)
|
||||
{
|
||||
unsigned int x, y, texel_dwords;
|
||||
BOOL broken = FALSE;
|
||||
D3D11_BOX box;
|
||||
|
||||
texture_desc.Width = sizeof(bitmap_data) / (texture_desc.Height * test_data[i].texel_size);
|
||||
|
@ -26617,7 +26663,14 @@ static void test_format_compatibility(void)
|
|||
|
||||
texel_dwords = test_data[i].texel_size / sizeof(DWORD);
|
||||
get_texture_readback(dst_texture, 0, &rb);
|
||||
for (j = 0; j < ARRAY_SIZE(bitmap_data); ++j)
|
||||
colour = get_readback_color(&rb, 0, 0, 0);
|
||||
if (test_data[i].src_format == DXGI_FORMAT_R9G9B9E5_SHAREDEXP && colour == bitmap_data[0])
|
||||
{
|
||||
win_skip("Broken destination offset for %#x -> %#x copy.\n",
|
||||
test_data[i].src_format, test_data[i].dst_format);
|
||||
broken = TRUE;
|
||||
}
|
||||
for (j = 0; j < ARRAY_SIZE(bitmap_data) && !broken; ++j)
|
||||
{
|
||||
x = j % 4;
|
||||
y = j / 4;
|
||||
|
|
|
@ -3816,7 +3816,7 @@ static HRESULT WINAPI d3dx_effect_FindNextValidTechnique(ID3DXEffect *iface, D3D
|
|||
}
|
||||
}
|
||||
|
||||
*next_technique = get_technique_handle(&effect->techniques[0]);
|
||||
*next_technique = NULL;
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
|
|
|
@ -887,6 +887,42 @@ static BOOL convert_dib_to_bmp(const void **data, unsigned int *size)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
/* windowscodecs always returns xRGB, but we should return ARGB if and only if
|
||||
* at least one pixel has a non-zero alpha component. */
|
||||
static BOOL image_is_argb(IWICBitmapFrameDecode *frame, const D3DXIMAGE_INFO *info)
|
||||
{
|
||||
unsigned int size, i;
|
||||
BYTE *buffer;
|
||||
HRESULT hr;
|
||||
|
||||
if (info->Format != D3DFMT_X8R8G8B8 || (info->ImageFileFormat != D3DXIFF_BMP
|
||||
&& info->ImageFileFormat != D3DXIFF_TGA))
|
||||
return FALSE;
|
||||
|
||||
size = info->Width * info->Height * 4;
|
||||
if (!(buffer = malloc(size)))
|
||||
return FALSE;
|
||||
|
||||
if (FAILED(hr = IWICBitmapFrameDecode_CopyPixels(frame, NULL, info->Width * 4, size, buffer)))
|
||||
{
|
||||
ERR("Failed to copy pixels, hr %#x.\n", hr);
|
||||
free(buffer);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
for (i = 0; i < info->Width * info->Height; ++i)
|
||||
{
|
||||
if (buffer[i * 4 + 3])
|
||||
{
|
||||
free(buffer);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
free(buffer);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/************************************************************
|
||||
* D3DXGetImageInfoFromFileInMemory
|
||||
*
|
||||
|
@ -1006,6 +1042,9 @@ HRESULT WINAPI D3DXGetImageInfoFromFileInMemory(const void *data, UINT datasize,
|
|||
}
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr) && image_is_argb(frame, info))
|
||||
info->Format = D3DFMT_A8R8G8B8;
|
||||
|
||||
if (frame)
|
||||
IWICBitmapFrameDecode_Release(frame);
|
||||
|
||||
|
|
|
@ -7892,9 +7892,9 @@ static void test_effect_find_next_valid_technique(void)
|
|||
D3DPRESENT_PARAMETERS present_parameters = {0};
|
||||
IDirect3DDevice9 *device;
|
||||
D3DXTECHNIQUE_DESC desc;
|
||||
D3DXHANDLE tech, tech2;
|
||||
ID3DXEffect *effect;
|
||||
IDirect3D9 *d3d;
|
||||
D3DXHANDLE tech;
|
||||
ULONG refcount;
|
||||
HWND window;
|
||||
HRESULT hr;
|
||||
|
@ -7939,9 +7939,12 @@ static void test_effect_find_next_valid_technique(void)
|
|||
ok(hr == D3D_OK, "Got result %#x.\n", hr);
|
||||
ok(!strcmp(desc.Name, "tech1"), "Got unexpected technique %s.\n", desc.Name);
|
||||
|
||||
hr = effect->lpVtbl->FindNextValidTechnique(effect, tech, &tech);
|
||||
tech2 = tech;
|
||||
hr = effect->lpVtbl->FindNextValidTechnique(effect, tech, &tech2);
|
||||
ok(hr == S_FALSE, "Got result %#x.\n", hr);
|
||||
hr = effect->lpVtbl->GetTechniqueDesc(effect, tech, &desc);
|
||||
ok(!tech2, "Unexpected technique handle %p.\n", tech2);
|
||||
/* Test GetTechniqueDesc() with a NULL handle. */
|
||||
hr = effect->lpVtbl->GetTechniqueDesc(effect, tech2, &desc);
|
||||
ok(hr == D3D_OK, "Got result %#x.\n", hr);
|
||||
ok(!strcmp(desc.Name, "tech0"), "Got unexpected technique %s.\n", desc.Name);
|
||||
|
||||
|
@ -7957,9 +7960,10 @@ static void test_effect_find_next_valid_technique(void)
|
|||
ok(hr == D3D_OK, "Got result %#x.\n", hr);
|
||||
ok(!strcmp(desc.Name, "tech1"), "Got unexpected technique %s.\n", desc.Name);
|
||||
|
||||
hr = effect->lpVtbl->FindNextValidTechnique(effect, tech, &tech);
|
||||
hr = effect->lpVtbl->FindNextValidTechnique(effect, tech, &tech2);
|
||||
ok(hr == S_FALSE, "Got result %#x.\n", hr);
|
||||
hr = effect->lpVtbl->GetTechniqueDesc(effect, tech, &desc);
|
||||
ok(!tech2, "Unexpected technique handle %p.\n", tech2);
|
||||
hr = effect->lpVtbl->GetTechniqueDesc(effect, tech2, &desc);
|
||||
ok(hr == D3D_OK, "Got result %#x.\n", hr);
|
||||
ok(!strcmp(desc.Name, "tech0"), "Got unexpected technique %s.\n", desc.Name);
|
||||
|
||||
|
@ -7985,8 +7989,9 @@ static void test_effect_find_next_valid_technique(void)
|
|||
ok(hr == D3D_OK, "Got result %#x.\n", hr);
|
||||
ok(!strcmp(desc.Name, "tech1"), "Got unexpected technique %s.\n", desc.Name);
|
||||
|
||||
hr = effect->lpVtbl->FindNextValidTechnique(effect, tech, &tech);
|
||||
hr = effect->lpVtbl->FindNextValidTechnique(effect, tech, &tech2);
|
||||
ok(hr == S_FALSE, "Got result %#x.\n", hr);
|
||||
ok(!tech2, "Unexpected technique handle %p.\n", tech2);
|
||||
|
||||
hr = effect->lpVtbl->FindNextValidTechnique(effect, "nope", &tech);
|
||||
ok(hr == D3DERR_INVALIDCALL, "Got result %#x.\n", hr);
|
||||
|
|
|
@ -698,7 +698,7 @@ static void test_D3DXGetImageInfo(void)
|
|||
ok(info.Format == D3DFMT_X8R8G8B8, "Got unexpected format %u.\n", info.Format);
|
||||
hr = D3DXGetImageInfoFromFileInMemory(bmp_32bpp_argb, sizeof(bmp_32bpp_argb), &info);
|
||||
ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
|
||||
todo_wine ok(info.Format == D3DFMT_A8R8G8B8, "Got unexpected format %u.\n", info.Format);
|
||||
ok(info.Format == D3DFMT_A8R8G8B8, "Got unexpected format %u.\n", info.Format);
|
||||
|
||||
/* Grayscale PNG */
|
||||
hr = D3DXGetImageInfoFromFileInMemory(png_grayscale, sizeof(png_grayscale), &info);
|
||||
|
|
|
@ -41,7 +41,8 @@ typedef enum _UNWIND_OP_CODES
|
|||
UWOP_SET_FPREG,
|
||||
UWOP_SAVE_NONVOL,
|
||||
UWOP_SAVE_NONVOL_FAR,
|
||||
UWOP_SAVE_XMM128,
|
||||
UWOP_EPILOG,
|
||||
UWOP_SAVE_XMM128 = 8,
|
||||
UWOP_SAVE_XMM128_FAR,
|
||||
UWOP_PUSH_MACHFRAME
|
||||
} UNWIND_CODE_OPS;
|
||||
|
|
|
@ -75,7 +75,7 @@
|
|||
@ stdcall SymFromIndex(long int64 long ptr)
|
||||
@ stdcall SymFromIndexW(long int64 long ptr)
|
||||
@ stdcall SymFromName(long str ptr)
|
||||
@ stub SymFromNameW
|
||||
@ stdcall SymFromNameW(long wstr ptr)
|
||||
@ stub SymFromToken
|
||||
@ stub SymFromTokenW
|
||||
@ stdcall SymFunctionTableAccess(long long)
|
||||
|
|
|
@ -1404,6 +1404,39 @@ BOOL WINAPI SymFromName(HANDLE hProcess, PCSTR Name, PSYMBOL_INFO Symbol)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* SymFromNameW (DBGHELP.@)
|
||||
*/
|
||||
BOOL WINAPI SymFromNameW(HANDLE process, const WCHAR *name, SYMBOL_INFOW *symbol)
|
||||
{
|
||||
SYMBOL_INFO *si;
|
||||
DWORD len;
|
||||
char *tmp;
|
||||
BOOL ret;
|
||||
|
||||
TRACE("(%p, %s, %p)\n", process, debugstr_w(name), symbol);
|
||||
|
||||
len = sizeof(*si) + symbol->MaxNameLen * sizeof(WCHAR);
|
||||
if (!(si = HeapAlloc(GetProcessHeap(), 0, len))) return FALSE;
|
||||
|
||||
len = WideCharToMultiByte(CP_ACP, 0, name, -1, NULL, 0, NULL, NULL);
|
||||
if (!(tmp = HeapAlloc(GetProcessHeap(), 0, len)))
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, si);
|
||||
return FALSE;
|
||||
}
|
||||
WideCharToMultiByte(CP_ACP, 0, name, -1, tmp, len, NULL, NULL);
|
||||
|
||||
si->SizeOfStruct = sizeof(*si);
|
||||
si->MaxNameLen = symbol->MaxNameLen;
|
||||
if ((ret = SymFromName(process, tmp, si)))
|
||||
copy_symbolW(symbol, si);
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, tmp);
|
||||
HeapFree(GetProcessHeap(), 0, si);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* SymGetSymFromName64 (DBGHELP.@)
|
||||
*/
|
||||
|
|
|
@ -3,6 +3,7 @@ MODULE = dcomp.dll
|
|||
EXTRADLLFLAGS = -mno-cygwin
|
||||
|
||||
C_SRCS = \
|
||||
device.c \
|
||||
main.c
|
||||
|
||||
RC_SRCS = version.rc
|
||||
|
|
|
@ -13,9 +13,9 @@
|
|||
@ stub CreateEffectDescription
|
||||
@ stub DCompositionAttachMouseDragToHwnd
|
||||
@ stub DCompositionAttachMouseWheelToHwnd
|
||||
@ stub DCompositionCreateDevice2
|
||||
@ stdcall DCompositionCreateDevice2(ptr ptr ptr)
|
||||
@ stub DCompositionCreateDevice3
|
||||
@ stub DCompositionCreateDevice
|
||||
@ stdcall DCompositionCreateDevice(ptr ptr ptr)
|
||||
@ stub DCompositionCreateSurfaceHandle
|
||||
@ stub DeserializeEffectDescription
|
||||
@ stub DllCanUnloadNow
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* Copyright 2020 Nikolay Sivov for CodeWeavers
|
||||
*
|
||||
* 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 should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "objidl.h"
|
||||
#include "dxgi.h"
|
||||
#include "wine/debug.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(dcomp);
|
||||
|
||||
HRESULT WINAPI DCompositionCreateDevice(IDXGIDevice *dxgi_device, REFIID iid, void **device)
|
||||
{
|
||||
FIXME("%p, %s, %p.\n", dxgi_device, debugstr_guid(iid), device);
|
||||
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT WINAPI DCompositionCreateDevice2(IUnknown *rendering_device, REFIID iid, void **device)
|
||||
{
|
||||
FIXME("%p, %s, %p.\n", rendering_device, debugstr_guid(iid), device);
|
||||
|
||||
return E_NOTIMPL;
|
||||
}
|
|
@ -583,8 +583,10 @@ static HRESULT ddraw_attach_d3d_device(struct ddraw *ddraw, HWND window,
|
|||
swapchain_desc.swap_effect = WINED3D_SWAP_EFFECT_DISCARD;
|
||||
swapchain_desc.device_window = window;
|
||||
swapchain_desc.windowed = windowed;
|
||||
swapchain_desc.flags = WINED3D_SWAPCHAIN_ALLOW_MODE_SWITCH
|
||||
| WINED3D_SWAPCHAIN_IMPLICIT | WINED3D_SWAPCHAIN_NO_WINDOW_CHANGES;
|
||||
swapchain_desc.flags = WINED3D_SWAPCHAIN_ALLOW_MODE_SWITCH | WINED3D_SWAPCHAIN_IMPLICIT;
|
||||
|
||||
if (window != GetForegroundWindow())
|
||||
swapchain_desc.flags |= WINED3D_SWAPCHAIN_NO_WINDOW_CHANGES;
|
||||
|
||||
if (ddraw->flags & DDRAW_NO3D)
|
||||
return wined3d_swapchain_create(ddraw->wined3d_device, &swapchain_desc,
|
||||
|
|
|
@ -39,6 +39,16 @@ static BOOL ddraw_surface_is_lost(const struct ddraw_surface *surface)
|
|||
&& (surface->ddraw->device_state != DDRAW_DEVICE_STATE_OK || surface->is_lost);
|
||||
}
|
||||
|
||||
static BOOL ddraw_gdi_is_front(struct ddraw *ddraw)
|
||||
{
|
||||
struct ddraw_surface *surface;
|
||||
|
||||
if (!ddraw->gdi_surface || !(surface = wined3d_texture_get_sub_resource_parent(ddraw->gdi_surface, 0)))
|
||||
return FALSE;
|
||||
|
||||
return surface->surface_desc.ddsCaps.dwCaps & DDSCAPS_FRONTBUFFER;
|
||||
}
|
||||
|
||||
/* This is slow, of course. Also, in case of locks, we can't prevent other
|
||||
* applications from drawing to the screen while we've locked the frontbuffer.
|
||||
* We'd like to do this in wined3d instead, but for that to work wined3d needs
|
||||
|
@ -46,6 +56,7 @@ static BOOL ddraw_surface_is_lost(const struct ddraw_surface *surface)
|
|||
HRESULT ddraw_surface_update_frontbuffer(struct ddraw_surface *surface,
|
||||
const RECT *rect, BOOL read, unsigned int swap_interval)
|
||||
{
|
||||
struct ddraw *ddraw = surface->ddraw;
|
||||
struct wined3d_texture *dst_texture;
|
||||
HDC surface_dc, screen_dc;
|
||||
int x, y, w, h;
|
||||
|
@ -53,9 +64,9 @@ HRESULT ddraw_surface_update_frontbuffer(struct ddraw_surface *surface,
|
|||
BOOL ret;
|
||||
RECT r;
|
||||
|
||||
if (surface->ddraw->flags & DDRAW_SWAPPED && !read)
|
||||
if (ddraw->flags & DDRAW_SWAPPED && !read)
|
||||
{
|
||||
surface->ddraw->flags &= ~DDRAW_SWAPPED;
|
||||
ddraw->flags &= ~DDRAW_SWAPPED;
|
||||
rect = NULL;
|
||||
}
|
||||
|
||||
|
@ -73,7 +84,23 @@ HRESULT ddraw_surface_update_frontbuffer(struct ddraw_surface *surface,
|
|||
if (w <= 0 || h <= 0)
|
||||
return DD_OK;
|
||||
|
||||
if (surface->ddraw->swapchain_window)
|
||||
/* The interaction between ddraw and GDI drawing is not all that well
|
||||
* documented, and somewhat arcane. In ddraw exclusive mode, GDI draws
|
||||
* seemingly go to the *original* frontbuffer/primary surface, while ddraw
|
||||
* draws/flips go to the *current* frontbuffer surface. The bottom line is
|
||||
* that if the current frontbuffer is not the GDI frontbuffer, and there's
|
||||
* e.g. a popup window in front of the ddraw swapchain window, we can't
|
||||
* use wined3d_swapchain_present() to get the ddraw contents to the screen
|
||||
* while in exclusive mode, since it would get obscured by the popup
|
||||
* window. On the other hand, if the current frontbuffer *is* the GDI
|
||||
* frontbuffer, that's what's supposed to happen; the popup should obscure
|
||||
* (oart of) the ddraw swapchain window.
|
||||
*
|
||||
* This affects the "Deer Hunter" demo, which uses a popup window and GDI
|
||||
* draws to draw part of the user interface. See also the "fswindow"
|
||||
* sample is the DirectX 7 SDK. */
|
||||
if (ddraw->swapchain_window && (!(ddraw->cooperative_level & DDSCL_EXCLUSIVE)
|
||||
|| ddraw->swapchain_window == GetForegroundWindow() || ddraw_gdi_is_front(ddraw)))
|
||||
{
|
||||
/* Nothing to do, we control the frontbuffer, or at least the parts we
|
||||
* care about. */
|
||||
|
@ -81,15 +108,15 @@ HRESULT ddraw_surface_update_frontbuffer(struct ddraw_surface *surface,
|
|||
return DD_OK;
|
||||
|
||||
if (swap_interval)
|
||||
dst_texture = wined3d_swapchain_get_back_buffer(surface->ddraw->wined3d_swapchain, 0);
|
||||
dst_texture = wined3d_swapchain_get_back_buffer(ddraw->wined3d_swapchain, 0);
|
||||
else
|
||||
dst_texture = surface->ddraw->wined3d_frontbuffer;
|
||||
dst_texture = ddraw->wined3d_frontbuffer;
|
||||
|
||||
if (SUCCEEDED(hr = wined3d_texture_blt(dst_texture, 0, rect, surface->wined3d_texture,
|
||||
surface->sub_resource_idx, rect, 0, NULL, WINED3D_TEXF_POINT)) && swap_interval)
|
||||
{
|
||||
hr = wined3d_swapchain_present(surface->ddraw->wined3d_swapchain, rect, rect, NULL, swap_interval, 0);
|
||||
surface->ddraw->flags |= DDRAW_SWAPPED;
|
||||
hr = wined3d_swapchain_present(ddraw->wined3d_swapchain, rect, rect, NULL, swap_interval, 0);
|
||||
ddraw->flags |= DDRAW_SWAPPED;
|
||||
}
|
||||
return hr;
|
||||
}
|
||||
|
|
|
@ -166,6 +166,11 @@ static BOOL ddraw_is_vmware(IDirectDraw *ddraw)
|
|||
return ddraw_is_vendor(ddraw, 0x15ad);
|
||||
}
|
||||
|
||||
static BOOL is_software_device_type(const GUID *device_guid)
|
||||
{
|
||||
return device_guid != &IID_IDirect3DHALDevice;
|
||||
}
|
||||
|
||||
static IDirectDrawSurface *create_overlay(IDirectDraw *ddraw,
|
||||
unsigned int width, unsigned int height, DWORD format)
|
||||
{
|
||||
|
@ -605,7 +610,7 @@ static IDirectDraw *create_ddraw(void)
|
|||
return ddraw;
|
||||
}
|
||||
|
||||
static IDirect3DDevice *create_device(IDirectDraw *ddraw, HWND window, DWORD coop_level)
|
||||
static IDirect3DDevice *create_device_ex(IDirectDraw *ddraw, HWND window, DWORD coop_level, const GUID *device_guid)
|
||||
{
|
||||
/* Prefer 16 bit depth buffers because Nvidia gives us an unpadded D24 buffer if we ask
|
||||
* for 24 bit and handles such buffers incorrectly in DDBLT_DEPTHFILL. AMD only supports
|
||||
|
@ -665,7 +670,7 @@ static IDirect3DDevice *create_device(IDirectDraw *ddraw, HWND window, DWORD coo
|
|||
if (FAILED(hr))
|
||||
continue;
|
||||
|
||||
if (SUCCEEDED(IDirectDrawSurface_QueryInterface(surface, &IID_IDirect3DHALDevice, (void **)&device)))
|
||||
if (SUCCEEDED(IDirectDrawSurface_QueryInterface(surface, device_guid, (void **)&device)))
|
||||
break;
|
||||
|
||||
IDirectDrawSurface_DeleteAttachedSurface(surface, 0, ds);
|
||||
|
@ -675,6 +680,11 @@ static IDirect3DDevice *create_device(IDirectDraw *ddraw, HWND window, DWORD coo
|
|||
return device;
|
||||
}
|
||||
|
||||
static IDirect3DDevice *create_device(IDirectDraw *ddraw, HWND window, DWORD coop_level)
|
||||
{
|
||||
return create_device_ex(ddraw, window, coop_level, &IID_IDirect3DHALDevice);
|
||||
}
|
||||
|
||||
static IDirect3DViewport *create_viewport(IDirect3DDevice *device, UINT x, UINT y, UINT w, UINT h)
|
||||
{
|
||||
IDirect3DViewport *viewport;
|
||||
|
@ -2533,14 +2543,16 @@ static void test_window_style(void)
|
|||
{
|
||||
LONG style, exstyle, tmp, expected_style;
|
||||
RECT fullscreen_rect, r;
|
||||
HWND window, window2;
|
||||
IDirectDraw *ddraw;
|
||||
HWND window;
|
||||
HRESULT hr;
|
||||
ULONG ref;
|
||||
BOOL ret;
|
||||
|
||||
window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW,
|
||||
0, 0, 100, 100, 0, 0, 0, 0);
|
||||
window2 = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
|
||||
0, 0, 50, 50, 0, 0, 0, 0);
|
||||
ddraw = create_ddraw();
|
||||
ok(!!ddraw, "Failed to create a ddraw object.\n");
|
||||
|
||||
|
@ -2584,6 +2596,68 @@ static void test_window_style(void)
|
|||
tmp = GetWindowLongA(window, GWL_EXSTYLE);
|
||||
ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
|
||||
|
||||
ShowWindow(window, SW_SHOW);
|
||||
ret = SetForegroundWindow(GetDesktopWindow());
|
||||
ok(ret, "Failed to set foreground window.\n");
|
||||
SetActiveWindow(window);
|
||||
ok(GetActiveWindow() == window, "Unexpected active window.\n");
|
||||
hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
||||
tmp = GetWindowLongA(window, GWL_STYLE);
|
||||
expected_style = style | WS_VISIBLE;
|
||||
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
|
||||
tmp = GetWindowLongA(window, GWL_EXSTYLE);
|
||||
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
|
||||
|
||||
GetWindowRect(window, &r);
|
||||
ok(EqualRect(&r, &fullscreen_rect), "Expected %s, got %s.\n",
|
||||
wine_dbgstr_rect(&fullscreen_rect), wine_dbgstr_rect(&r));
|
||||
|
||||
hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
||||
SetWindowPos(window, NULL, 0, 0, 100, 100, SWP_NOZORDER | SWP_NOACTIVATE);
|
||||
GetWindowRect(window, &r);
|
||||
ok(!EqualRect(&r, &fullscreen_rect), "Window resize failed? got %s.\n",
|
||||
wine_dbgstr_rect(&r));
|
||||
|
||||
ret = SetForegroundWindow(window2);
|
||||
ok(ret, "Failed to set foreground window.\n");
|
||||
hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
||||
tmp = GetWindowLongA(window, GWL_STYLE);
|
||||
expected_style = style | WS_VISIBLE;
|
||||
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
|
||||
tmp = GetWindowLongA(window, GWL_EXSTYLE);
|
||||
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
|
||||
|
||||
GetWindowRect(window, &r);
|
||||
ok(EqualRect(&r, &fullscreen_rect), "Expected %s, got %s.\n",
|
||||
wine_dbgstr_rect(&fullscreen_rect), wine_dbgstr_rect(&r));
|
||||
|
||||
ret = SetForegroundWindow(window);
|
||||
ok(ret, "Failed to set foreground window.\n");
|
||||
hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
||||
tmp = GetWindowLongA(window, GWL_STYLE);
|
||||
expected_style = style | WS_VISIBLE;
|
||||
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
|
||||
tmp = GetWindowLongA(window, GWL_EXSTYLE);
|
||||
expected_style = exstyle | WS_EX_TOPMOST;
|
||||
todo_wine ok(tmp == expected_style, "Expected window extended style %#x, got %#x.\n", expected_style, tmp);
|
||||
|
||||
ShowWindow(window, SW_HIDE);
|
||||
hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
||||
tmp = GetWindowLongA(window, GWL_STYLE);
|
||||
ok(tmp == style, "Expected window style %#x, got %#x.\n", style, tmp);
|
||||
tmp = GetWindowLongA(window, GWL_EXSTYLE);
|
||||
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
|
||||
|
||||
ShowWindow(window, SW_SHOW);
|
||||
hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
@ -2607,6 +2681,7 @@ static void test_window_style(void)
|
|||
ref = IDirectDraw_Release(ddraw);
|
||||
ok(ref == 0, "The ddraw object was not properly freed: refcount %u.\n", ref);
|
||||
|
||||
DestroyWindow(window2);
|
||||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
|
@ -4316,11 +4391,13 @@ static void test_unsupported_formats(void)
|
|||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
static void test_rt_caps(void)
|
||||
static void test_rt_caps(const GUID *device_guid)
|
||||
{
|
||||
PALETTEENTRY palette_entries[256];
|
||||
IDirectDrawPalette *palette;
|
||||
IDirect3DDevice *device;
|
||||
BOOL software_device;
|
||||
DWORD expected_caps;
|
||||
IDirectDraw *ddraw;
|
||||
DWORD z_depth = 0;
|
||||
unsigned int i;
|
||||
|
@ -4338,7 +4415,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
const DDPIXELFORMAT *pf;
|
||||
DWORD caps_in;
|
||||
DWORD caps_out;
|
||||
DWORD caps_out[2];
|
||||
HRESULT create_device_hr;
|
||||
BOOL create_may_fail;
|
||||
}
|
||||
|
@ -4347,149 +4424,155 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
|
||||
D3D_OK,
|
||||
FALSE,
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
|
||||
D3D_OK,
|
||||
FALSE,
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
DDSCAPS_OFFSCREENPLAIN,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
|
||||
DDERR_INVALIDCAPS,
|
||||
FALSE,
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
|
||||
D3DERR_SURFACENOTINVIDMEM,
|
||||
FALSE,
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
|
||||
DDERR_INVALIDCAPS,
|
||||
FALSE,
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
|
||||
D3D_OK,
|
||||
FALSE,
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
|
||||
D3D_OK,
|
||||
FALSE,
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
0,
|
||||
DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, DDSCAPS_SYSTEMMEMORY},
|
||||
DDERR_INVALIDCAPS,
|
||||
FALSE,
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
|
||||
D3DERR_SURFACENOTINVIDMEM,
|
||||
FALSE,
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
DDSCAPS_SYSTEMMEMORY,
|
||||
DDSCAPS_SYSTEMMEMORY,
|
||||
{DDSCAPS_SYSTEMMEMORY},
|
||||
DDERR_INVALIDCAPS,
|
||||
FALSE,
|
||||
},
|
||||
{
|
||||
&p8_fmt,
|
||||
0,
|
||||
DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
|
||||
DDERR_INVALIDCAPS,
|
||||
FALSE,
|
||||
},
|
||||
{
|
||||
&p8_fmt,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
|
||||
~0U /* AMD r200 */ ,
|
||||
{~0u /* AMD r200 */, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
|
||||
DDERR_NOPALETTEATTACHED,
|
||||
FALSE,
|
||||
},
|
||||
{
|
||||
&p8_fmt,
|
||||
DDSCAPS_OFFSCREENPLAIN,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
|
||||
DDERR_INVALIDCAPS,
|
||||
FALSE,
|
||||
},
|
||||
{
|
||||
&p8_fmt,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
|
||||
DDERR_NOPALETTEATTACHED,
|
||||
FALSE,
|
||||
},
|
||||
{
|
||||
&p8_fmt,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
|
||||
DDERR_INVALIDCAPS,
|
||||
FALSE,
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM},
|
||||
DDERR_INVALIDCAPS,
|
||||
TRUE /* AMD Evergreen */,
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
|
||||
~0U /* AMD Evergreen */,
|
||||
{~0u /* AMD Evergreen */, DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER | DDSCAPS_SYSTEMMEMORY},
|
||||
DDERR_INVALIDCAPS,
|
||||
FALSE,
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
DDSCAPS_ZBUFFER,
|
||||
~0U /* AMD Evergreen */,
|
||||
{~0u /* AMD Evergreen */, DDSCAPS_ZBUFFER | DDSCAPS_SYSTEMMEMORY},
|
||||
DDERR_INVALIDCAPS,
|
||||
FALSE,
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
|
||||
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER},
|
||||
DDERR_INVALIDCAPS,
|
||||
TRUE /* Nvidia Kepler */,
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER,
|
||||
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
|
||||
DDERR_INVALIDCAPS,
|
||||
TRUE /* Nvidia Kepler */,
|
||||
},
|
||||
};
|
||||
|
||||
software_device = is_software_device_type(device_guid);
|
||||
|
||||
window = create_window();
|
||||
ddraw = create_ddraw();
|
||||
ok(!!ddraw, "Failed to create a ddraw object.\n");
|
||||
if (!(device = create_device(ddraw, window, DDSCL_NORMAL)))
|
||||
if (!(device = create_device_ex(ddraw, window, DDSCL_NORMAL, device_guid)))
|
||||
{
|
||||
skip("Failed to create a 3D device, skipping test.\n");
|
||||
IDirectDraw_Release(ddraw);
|
||||
|
@ -4502,7 +4585,7 @@ static void test_rt_caps(void)
|
|||
|
||||
memset(palette_entries, 0, sizeof(palette_entries));
|
||||
hr = IDirectDraw_CreatePalette(ddraw, DDPCAPS_ALLOW256 | DDPCAPS_8BIT, palette_entries, &palette, NULL);
|
||||
ok(SUCCEEDED(hr), "Failed to create palette, hr %#x.\n", hr);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(test_data); ++i)
|
||||
{
|
||||
|
@ -4527,32 +4610,61 @@ static void test_rt_caps(void)
|
|||
surface_desc.dwWidth = 640;
|
||||
surface_desc.dwHeight = 480;
|
||||
hr = IDirectDraw_CreateSurface(ddraw, &surface_desc, &surface, NULL);
|
||||
ok(SUCCEEDED(hr) || broken(test_data[i].create_may_fail),
|
||||
"Test %u: Failed to create surface with caps %#x, hr %#x.\n",
|
||||
i, test_data[i].caps_in, hr);
|
||||
if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY && hr == DDERR_NODIRECTDRAWHW)
|
||||
{
|
||||
skip("No 3d hardware, skipping test %u, software_device %u.\n", i, software_device);
|
||||
continue;
|
||||
}
|
||||
ok(hr == DD_OK || broken(test_data[i].create_may_fail
|
||||
|| (software_device && test_data[i].pf == &p8_fmt && hr == DDERR_INVALIDPIXELFORMAT)),
|
||||
"Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
|
||||
if (FAILED(hr))
|
||||
continue;
|
||||
|
||||
memset(&surface_desc, 0, sizeof(surface_desc));
|
||||
surface_desc.dwSize = sizeof(surface_desc);
|
||||
hr = IDirectDrawSurface_GetSurfaceDesc(surface, &surface_desc);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to get surface desc, hr %#x.\n", i, hr);
|
||||
ok(test_data[i].caps_out == ~0U || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out,
|
||||
"Test %u: Got unexpected caps %#x, expected %#x.\n",
|
||||
i, surface_desc.ddsCaps.dwCaps, test_data[i].caps_out);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
if (software_device)
|
||||
{
|
||||
expected_caps = test_data[i].caps_out[1]
|
||||
? test_data[i].caps_out[1] : test_data[i].caps_out[0];
|
||||
|
||||
hr = IDirectDrawSurface_QueryInterface(surface, &IID_IDirect3DHALDevice, (void **)&device);
|
||||
ok(hr == test_data[i].create_device_hr, "Test %u: Got unexpected hr %#x, expected %#x.\n",
|
||||
i, hr, test_data[i].create_device_hr);
|
||||
todo_wine_if(test_data[i].caps_out[0] == ~0u && surface_desc.ddsCaps.dwCaps != expected_caps)
|
||||
ok(surface_desc.ddsCaps.dwCaps == expected_caps
|
||||
|| surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0],
|
||||
"Got unexpected caps %#x, test %u, software_device %u.\n",
|
||||
surface_desc.ddsCaps.dwCaps, i, software_device);
|
||||
}
|
||||
else
|
||||
{
|
||||
ok(test_data[i].caps_out[0] == ~0u || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0],
|
||||
"Got unexpected caps %#x, expected %#x, test %u, software_device %u.\n",
|
||||
surface_desc.ddsCaps.dwCaps, test_data[i].caps_out[0], i, software_device);
|
||||
}
|
||||
|
||||
hr = IDirectDrawSurface_QueryInterface(surface, device_guid, (void **)&device);
|
||||
todo_wine_if(software_device && test_data[i].create_device_hr == D3DERR_SURFACENOTINVIDMEM)
|
||||
ok((!software_device && hr == test_data[i].create_device_hr)
|
||||
|| (software_device && (hr == (test_data[i].create_device_hr == D3DERR_SURFACENOTINVIDMEM
|
||||
? DD_OK : test_data[i].create_device_hr))),
|
||||
"Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
if (hr == DDERR_NOPALETTEATTACHED)
|
||||
{
|
||||
hr = IDirectDrawSurface_SetPalette(surface, palette);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to set palette, hr %#x.\n", i, hr);
|
||||
hr = IDirectDrawSurface_QueryInterface(surface, &IID_IDirect3DHALDevice, (void **)&device);
|
||||
if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY)
|
||||
ok(hr == DDERR_INVALIDPIXELFORMAT, "Test %u: Got unexpected hr %#x.\n", i, hr);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
hr = IDirectDrawSurface_QueryInterface(surface, device_guid, (void **)&device);
|
||||
if (software_device)
|
||||
todo_wine
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n",
|
||||
hr, i, software_device);
|
||||
else if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY)
|
||||
ok(hr == DDERR_INVALIDPIXELFORMAT, "Got unexpected hr %#x, test %u, software_device %u.\n",
|
||||
hr, i, software_device);
|
||||
else
|
||||
ok(hr == D3DERR_SURFACENOTINVIDMEM, "Test %u: Got unexpected hr %#x.\n", i, hr);
|
||||
ok(hr == D3DERR_SURFACENOTINVIDMEM, "Got unexpected hr %#x, test %u, software_device %u.\n",
|
||||
hr, i, software_device);
|
||||
}
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
|
@ -14284,6 +14396,12 @@ static void test_get_display_mode(void)
|
|||
IDirectDraw_Release(ddraw);
|
||||
}
|
||||
|
||||
static void run_for_each_device_type(void (*test_func)(const GUID *))
|
||||
{
|
||||
test_func(&IID_IDirect3DHALDevice);
|
||||
test_func(&IID_IDirect3DRGBDevice);
|
||||
}
|
||||
|
||||
START_TEST(ddraw1)
|
||||
{
|
||||
DDDEVICEIDENTIFIER identifier;
|
||||
|
@ -14345,7 +14463,7 @@ START_TEST(ddraw1)
|
|||
test_clear_rect_count();
|
||||
test_coop_level_activateapp();
|
||||
test_unsupported_formats();
|
||||
test_rt_caps();
|
||||
run_for_each_device_type(test_rt_caps);
|
||||
test_primary_caps();
|
||||
test_surface_lock();
|
||||
test_surface_discard();
|
||||
|
|
|
@ -163,6 +163,11 @@ static BOOL ddraw_is_vmware(IDirectDraw2 *ddraw)
|
|||
return ddraw_is_vendor(ddraw, 0x15ad);
|
||||
}
|
||||
|
||||
static BOOL is_software_device_type(const GUID *device_guid)
|
||||
{
|
||||
return device_guid != &IID_IDirect3DHALDevice;
|
||||
}
|
||||
|
||||
static IDirectDrawSurface *create_overlay(IDirectDraw2 *ddraw,
|
||||
unsigned int width, unsigned int height, DWORD format)
|
||||
{
|
||||
|
@ -435,7 +440,7 @@ static IDirectDraw2 *create_ddraw(void)
|
|||
return ddraw2;
|
||||
}
|
||||
|
||||
static IDirect3DDevice2 *create_device(IDirectDraw2 *ddraw, HWND window, DWORD coop_level)
|
||||
static IDirect3DDevice2 *create_device_ex(IDirectDraw2 *ddraw, HWND window, DWORD coop_level, const GUID *device_guid)
|
||||
{
|
||||
/* Prefer 16 bit depth buffers because Nvidia gives us an unpadded D24 buffer if we ask
|
||||
* for 24 bit and handles such buffers incorrectly in DDBLT_DEPTHFILL. AMD only supports
|
||||
|
@ -503,7 +508,7 @@ static IDirect3DDevice2 *create_device(IDirectDraw2 *ddraw, HWND window, DWORD c
|
|||
if (FAILED(hr))
|
||||
continue;
|
||||
|
||||
if (SUCCEEDED(IDirect3D2_CreateDevice(d3d, &IID_IDirect3DHALDevice, surface, &device)))
|
||||
if (SUCCEEDED(IDirect3D2_CreateDevice(d3d, device_guid, surface, &device)))
|
||||
break;
|
||||
|
||||
IDirectDrawSurface_DeleteAttachedSurface(surface, 0, ds);
|
||||
|
@ -514,6 +519,11 @@ static IDirect3DDevice2 *create_device(IDirectDraw2 *ddraw, HWND window, DWORD c
|
|||
return device;
|
||||
}
|
||||
|
||||
static IDirect3DDevice2 *create_device(IDirectDraw2 *ddraw, HWND window, DWORD coop_level)
|
||||
{
|
||||
return create_device_ex(ddraw, window, coop_level, &IID_IDirect3DHALDevice);
|
||||
}
|
||||
|
||||
static IDirect3DViewport2 *create_viewport(IDirect3DDevice2 *device, UINT x, UINT y, UINT w, UINT h)
|
||||
{
|
||||
IDirect3DViewport2 *viewport;
|
||||
|
@ -2587,14 +2597,16 @@ static void test_window_style(void)
|
|||
{
|
||||
LONG style, exstyle, tmp, expected_style;
|
||||
RECT fullscreen_rect, r;
|
||||
HWND window, window2;
|
||||
IDirectDraw2 *ddraw;
|
||||
HWND window;
|
||||
HRESULT hr;
|
||||
ULONG ref;
|
||||
BOOL ret;
|
||||
|
||||
window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW,
|
||||
0, 0, 100, 100, 0, 0, 0, 0);
|
||||
window2 = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
|
||||
0, 0, 50, 50, 0, 0, 0, 0);
|
||||
ddraw = create_ddraw();
|
||||
ok(!!ddraw, "Failed to create a ddraw object.\n");
|
||||
|
||||
|
@ -2638,6 +2650,68 @@ static void test_window_style(void)
|
|||
tmp = GetWindowLongA(window, GWL_EXSTYLE);
|
||||
ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
|
||||
|
||||
ShowWindow(window, SW_SHOW);
|
||||
ret = SetForegroundWindow(GetDesktopWindow());
|
||||
ok(ret, "Failed to set foreground window.\n");
|
||||
SetActiveWindow(window);
|
||||
ok(GetActiveWindow() == window, "Unexpected active window.\n");
|
||||
hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
||||
tmp = GetWindowLongA(window, GWL_STYLE);
|
||||
expected_style = style | WS_VISIBLE;
|
||||
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
|
||||
tmp = GetWindowLongA(window, GWL_EXSTYLE);
|
||||
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
|
||||
|
||||
GetWindowRect(window, &r);
|
||||
ok(EqualRect(&r, &fullscreen_rect), "Expected %s, got %s.\n",
|
||||
wine_dbgstr_rect(&fullscreen_rect), wine_dbgstr_rect(&r));
|
||||
|
||||
hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
||||
SetWindowPos(window, NULL, 0, 0, 100, 100, SWP_NOZORDER | SWP_NOACTIVATE);
|
||||
GetWindowRect(window, &r);
|
||||
ok(!EqualRect(&r, &fullscreen_rect), "Window resize failed? got %s.\n",
|
||||
wine_dbgstr_rect(&r));
|
||||
|
||||
ret = SetForegroundWindow(window2);
|
||||
ok(ret, "Failed to set foreground window.\n");
|
||||
hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
||||
tmp = GetWindowLongA(window, GWL_STYLE);
|
||||
expected_style = style | WS_VISIBLE;
|
||||
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
|
||||
tmp = GetWindowLongA(window, GWL_EXSTYLE);
|
||||
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
|
||||
|
||||
GetWindowRect(window, &r);
|
||||
ok(EqualRect(&r, &fullscreen_rect), "Expected %s, got %s.\n",
|
||||
wine_dbgstr_rect(&fullscreen_rect), wine_dbgstr_rect(&r));
|
||||
|
||||
ret = SetForegroundWindow(window);
|
||||
ok(ret, "Failed to set foreground window.\n");
|
||||
hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
||||
tmp = GetWindowLongA(window, GWL_STYLE);
|
||||
expected_style = style | WS_VISIBLE;
|
||||
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
|
||||
tmp = GetWindowLongA(window, GWL_EXSTYLE);
|
||||
expected_style = exstyle | WS_EX_TOPMOST;
|
||||
todo_wine ok(tmp == expected_style, "Expected window extended style %#x, got %#x.\n", expected_style, tmp);
|
||||
|
||||
ShowWindow(window, SW_HIDE);
|
||||
hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
||||
tmp = GetWindowLongA(window, GWL_STYLE);
|
||||
ok(tmp == style, "Expected window style %#x, got %#x.\n", style, tmp);
|
||||
tmp = GetWindowLongA(window, GWL_EXSTYLE);
|
||||
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
|
||||
|
||||
ShowWindow(window, SW_SHOW);
|
||||
hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
@ -2661,6 +2735,7 @@ static void test_window_style(void)
|
|||
ref = IDirectDraw2_Release(ddraw);
|
||||
ok(ref == 0, "The ddraw object was not properly freed: refcount %u.\n", ref);
|
||||
|
||||
DestroyWindow(window2);
|
||||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
|
@ -4739,11 +4814,13 @@ static void test_unsupported_formats(void)
|
|||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
static void test_rt_caps(void)
|
||||
static void test_rt_caps(const GUID *device_guid)
|
||||
{
|
||||
PALETTEENTRY palette_entries[256];
|
||||
IDirectDrawPalette *palette;
|
||||
IDirect3DDevice2 *device;
|
||||
BOOL software_device;
|
||||
DWORD expected_caps;
|
||||
IDirectDraw2 *ddraw;
|
||||
DWORD z_depth = 0;
|
||||
IDirect3D2 *d3d;
|
||||
|
@ -4762,7 +4839,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
const DDPIXELFORMAT *pf;
|
||||
DWORD caps_in;
|
||||
DWORD caps_out;
|
||||
DWORD caps_out[2];
|
||||
HRESULT create_device_hr;
|
||||
HRESULT set_rt_hr;
|
||||
HRESULT alternative_set_rt_hr;
|
||||
|
@ -4773,7 +4850,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
|
||||
D3D_OK,
|
||||
D3D_OK,
|
||||
D3D_OK,
|
||||
|
@ -4782,7 +4859,8 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
|
||||
D3D_OK,
|
||||
D3D_OK,
|
||||
D3D_OK,
|
||||
|
@ -4791,7 +4869,8 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_OFFSCREENPLAIN,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -4800,7 +4879,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
|
||||
D3DERR_SURFACENOTINVIDMEM,
|
||||
D3D_OK,
|
||||
D3D_OK,
|
||||
|
@ -4809,7 +4888,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -4818,7 +4897,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
|
||||
D3D_OK,
|
||||
D3D_OK,
|
||||
D3D_OK,
|
||||
|
@ -4827,7 +4906,8 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
|
||||
D3D_OK,
|
||||
D3D_OK,
|
||||
D3D_OK,
|
||||
|
@ -4836,7 +4916,8 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
0,
|
||||
DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_SYSTEMMEMORY},
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -4845,7 +4926,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
|
||||
D3DERR_SURFACENOTINVIDMEM,
|
||||
D3D_OK,
|
||||
D3D_OK,
|
||||
|
@ -4854,7 +4935,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_SYSTEMMEMORY,
|
||||
DDSCAPS_SYSTEMMEMORY,
|
||||
{DDSCAPS_SYSTEMMEMORY},
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -4863,7 +4944,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&p8_fmt,
|
||||
0,
|
||||
DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -4872,7 +4953,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&p8_fmt,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
|
||||
~0U /* AMD r200 */,
|
||||
{~0u /* AMD r200 */, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
|
||||
DDERR_NOPALETTEATTACHED,
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -4881,7 +4962,8 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&p8_fmt,
|
||||
DDSCAPS_OFFSCREENPLAIN,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -4890,7 +4972,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&p8_fmt,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
|
||||
DDERR_NOPALETTEATTACHED,
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -4899,7 +4981,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&p8_fmt,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -4908,7 +4990,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM},
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDPIXELFORMAT,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -4917,7 +4999,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
|
||||
~0U /* AMD Evergreen */,
|
||||
{~0u /* AMD Evergreen */, DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER | DDSCAPS_SYSTEMMEMORY},
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDPIXELFORMAT,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -4926,7 +5008,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_ZBUFFER,
|
||||
~0U /* AMD Evergreen */,
|
||||
{~0u /* AMD Evergreen */, DDSCAPS_ZBUFFER | DDSCAPS_SYSTEMMEMORY},
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -4935,7 +5017,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
|
||||
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER},
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDPIXELFORMAT,
|
||||
DDERR_INVALIDPIXELFORMAT,
|
||||
|
@ -4944,7 +5026,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER,
|
||||
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDCAPS,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -4952,10 +5034,12 @@ static void test_rt_caps(void)
|
|||
},
|
||||
};
|
||||
|
||||
software_device = is_software_device_type(device_guid);
|
||||
|
||||
window = create_window();
|
||||
ddraw = create_ddraw();
|
||||
ok(!!ddraw, "Failed to create a ddraw object.\n");
|
||||
if (!(device = create_device(ddraw, window, DDSCL_NORMAL)))
|
||||
if (!(device = create_device_ex(ddraw, window, DDSCL_NORMAL, device_guid)))
|
||||
{
|
||||
skip("Failed to create a 3D device, skipping test.\n");
|
||||
IDirectDraw2_Release(ddraw);
|
||||
|
@ -4974,7 +5058,7 @@ static void test_rt_caps(void)
|
|||
|
||||
memset(palette_entries, 0, sizeof(palette_entries));
|
||||
hr = IDirectDraw2_CreatePalette(ddraw, DDPCAPS_ALLOW256 | DDPCAPS_8BIT, palette_entries, &palette, NULL);
|
||||
ok(SUCCEEDED(hr), "Failed to create palette, hr %#x.\n", hr);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(test_data); ++i)
|
||||
{
|
||||
|
@ -4999,34 +5083,70 @@ static void test_rt_caps(void)
|
|||
surface_desc.dwWidth = 640;
|
||||
surface_desc.dwHeight = 480;
|
||||
hr = IDirectDraw2_CreateSurface(ddraw, &surface_desc, &surface, NULL);
|
||||
ok(SUCCEEDED(hr) || broken(test_data[i].create_may_fail),
|
||||
"Test %u: Failed to create surface with caps %#x, hr %#x.\n",
|
||||
i, test_data[i].caps_in, hr);
|
||||
if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY && hr == DDERR_NODIRECTDRAWHW)
|
||||
{
|
||||
skip("No 3d hardware, skipping test %u, software_device %u.\n", i, software_device);
|
||||
continue;
|
||||
}
|
||||
ok(hr == DD_OK || broken(test_data[i].create_may_fail
|
||||
|| (software_device && test_data[i].pf == &p8_fmt && hr == DDERR_INVALIDPIXELFORMAT)),
|
||||
"Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
if (FAILED(hr))
|
||||
continue;
|
||||
|
||||
memset(&surface_desc, 0, sizeof(surface_desc));
|
||||
surface_desc.dwSize = sizeof(surface_desc);
|
||||
hr = IDirectDrawSurface_GetSurfaceDesc(surface, &surface_desc);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to get surface desc, hr %#x.\n", i, hr);
|
||||
ok(test_data[i].caps_out == ~0U || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out,
|
||||
"Test %u: Got unexpected caps %#x, expected %#x.\n",
|
||||
i, surface_desc.ddsCaps.dwCaps, test_data[i].caps_out);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
if (software_device)
|
||||
{
|
||||
expected_caps = test_data[i].caps_out[software_device]
|
||||
? test_data[i].caps_out[software_device] : test_data[i].caps_out[0];
|
||||
|
||||
todo_wine_if(test_data[i].caps_out[0] == ~0u && surface_desc.ddsCaps.dwCaps != expected_caps)
|
||||
ok(surface_desc.ddsCaps.dwCaps == expected_caps
|
||||
|| surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0],
|
||||
"Got unexpected caps %#x, test %u, software_device %u.\n",
|
||||
surface_desc.ddsCaps.dwCaps, i, software_device);
|
||||
}
|
||||
else
|
||||
{
|
||||
ok(test_data[i].caps_out[0] == ~0u || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0],
|
||||
"Got unexpected caps %#x, expected %#x, test %u, software_device %u.\n",
|
||||
surface_desc.ddsCaps.dwCaps, test_data[i].caps_out[0], i, software_device);
|
||||
}
|
||||
|
||||
hr = IDirect3D2_CreateDevice(d3d, device_guid, surface, &device);
|
||||
|
||||
todo_wine_if(software_device && test_data[i].create_device_hr == D3DERR_SURFACENOTINVIDMEM)
|
||||
ok((!software_device && hr == test_data[i].create_device_hr)
|
||||
|| (software_device && (hr == (test_data[i].create_device_hr == D3DERR_SURFACENOTINVIDMEM
|
||||
? DD_OK : test_data[i].create_device_hr))),
|
||||
"Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
|
||||
hr = IDirect3D2_CreateDevice(d3d, &IID_IDirect3DHALDevice, surface, &device);
|
||||
ok(hr == test_data[i].create_device_hr, "Test %u: Got unexpected hr %#x, expected %#x.\n",
|
||||
i, hr, test_data[i].create_device_hr);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
if (hr == DDERR_NOPALETTEATTACHED)
|
||||
{
|
||||
hr = IDirectDrawSurface_SetPalette(surface, palette);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to set palette, hr %#x.\n", i, hr);
|
||||
hr = IDirect3D2_CreateDevice(d3d, &IID_IDirect3DHALDevice, surface, &device);
|
||||
if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY)
|
||||
ok(hr == DDERR_INVALIDPIXELFORMAT, "Test %u: Got unexpected hr %#x.\n", i, hr);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
hr = IDirect3D2_CreateDevice(d3d, device_guid, surface, &device);
|
||||
if (software_device)
|
||||
todo_wine
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n",
|
||||
hr, i, software_device);
|
||||
else if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY)
|
||||
ok(hr == DDERR_INVALIDPIXELFORMAT, "Got unexpected hr %#x, test %u, software_device %u.\n",
|
||||
hr, i, software_device);
|
||||
else
|
||||
ok(hr == D3DERR_SURFACENOTINVIDMEM, "Test %u: Got unexpected hr %#x.\n", i, hr);
|
||||
ok(hr == D3DERR_SURFACENOTINVIDMEM, "Got unexpected hr %#x, test %u, software_device %u.\n",
|
||||
hr, i, software_device);
|
||||
|
||||
if (hr == DD_OK)
|
||||
{
|
||||
refcount = IDirect3DDevice2_Release(device);
|
||||
ok(!refcount, "Test %u: The device was not properly freed, refcount %u.\n", i, refcount);
|
||||
}
|
||||
}
|
||||
IDirectDrawSurface_Release(surface);
|
||||
|
||||
|
@ -5037,10 +5157,10 @@ static void test_rt_caps(void)
|
|||
surface_desc.dwWidth = 640;
|
||||
surface_desc.dwHeight = 480;
|
||||
hr = IDirectDraw2_CreateSurface(ddraw, &surface_desc, &surface, NULL);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to create surface, hr %#x.\n", i, hr);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
|
||||
hr = IDirect3D2_CreateDevice(d3d, &IID_IDirect3DHALDevice, surface, &device);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to create device, hr %#x.\n", i, hr);
|
||||
hr = IDirect3D2_CreateDevice(d3d, device_guid, surface, &device);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
}
|
||||
|
||||
memset(&surface_desc, 0, sizeof(surface_desc));
|
||||
|
@ -5060,13 +5180,14 @@ static void test_rt_caps(void)
|
|||
surface_desc.dwWidth = 640;
|
||||
surface_desc.dwHeight = 480;
|
||||
hr = IDirectDraw2_CreateSurface(ddraw, &surface_desc, &rt, NULL);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to create surface with caps %#x, hr %#x.\n",
|
||||
i, test_data[i].caps_in, hr);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
|
||||
hr = IDirect3DDevice2_SetRenderTarget(device, rt, 0);
|
||||
ok(hr == test_data[i].set_rt_hr || broken(hr == test_data[i].alternative_set_rt_hr),
|
||||
"Test %u: Got unexpected hr %#x, expected %#x.\n",
|
||||
i, hr, test_data[i].set_rt_hr);
|
||||
ok(hr == test_data[i].set_rt_hr || (software_device && hr == DDERR_NOPALETTEATTACHED)
|
||||
|| broken(hr == test_data[i].alternative_set_rt_hr),
|
||||
"Got unexpected hr %#x, test %u, software_device %u.\n",
|
||||
hr, i, software_device);
|
||||
|
||||
if (SUCCEEDED(hr) || hr == DDERR_INVALIDPIXELFORMAT)
|
||||
expected_rt = rt;
|
||||
else
|
||||
|
@ -5081,8 +5202,8 @@ static void test_rt_caps(void)
|
|||
}
|
||||
|
||||
hr = IDirect3DDevice2_GetRenderTarget(device, &tmp);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to get render target, hr %#x.\n", i, hr);
|
||||
ok(tmp == expected_rt, "Test %u: Got unexpected rt %p.\n", i, tmp);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
ok(tmp == expected_rt, "Got unexpected rt %p, test %u, software_device %u.\n", tmp, i, software_device);
|
||||
|
||||
IDirectDrawSurface_Release(tmp);
|
||||
IDirectDrawSurface_Release(rt);
|
||||
|
@ -15211,6 +15332,12 @@ done:
|
|||
IDirectDraw2_Release(ddraw);
|
||||
}
|
||||
|
||||
static void run_for_each_device_type(void (*test_func)(const GUID *))
|
||||
{
|
||||
test_func(&IID_IDirect3DHALDevice);
|
||||
test_func(&IID_IDirect3DRGBDevice);
|
||||
}
|
||||
|
||||
START_TEST(ddraw2)
|
||||
{
|
||||
DDDEVICEIDENTIFIER identifier;
|
||||
|
@ -15276,7 +15403,7 @@ START_TEST(ddraw2)
|
|||
test_lighting_interface_versions();
|
||||
test_coop_level_activateapp();
|
||||
test_unsupported_formats();
|
||||
test_rt_caps();
|
||||
run_for_each_device_type(test_rt_caps);
|
||||
test_primary_caps();
|
||||
test_surface_lock();
|
||||
test_surface_discard();
|
||||
|
|
|
@ -164,6 +164,11 @@ static BOOL ddraw_is_vmware(IDirectDraw4 *ddraw)
|
|||
return ddraw_is_vendor(ddraw, 0x15ad);
|
||||
}
|
||||
|
||||
static BOOL is_software_device_type(const GUID *device_guid)
|
||||
{
|
||||
return device_guid != &IID_IDirect3DHALDevice;
|
||||
}
|
||||
|
||||
static IDirectDrawSurface4 *create_overlay(IDirectDraw4 *ddraw,
|
||||
unsigned int width, unsigned int height, DWORD format)
|
||||
{
|
||||
|
@ -2827,14 +2832,16 @@ static void test_window_style(void)
|
|||
{
|
||||
LONG style, exstyle, tmp, expected_style;
|
||||
RECT fullscreen_rect, r;
|
||||
HWND window, window2;
|
||||
IDirectDraw4 *ddraw;
|
||||
HWND window;
|
||||
HRESULT hr;
|
||||
ULONG ref;
|
||||
BOOL ret;
|
||||
|
||||
window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW,
|
||||
0, 0, 100, 100, 0, 0, 0, 0);
|
||||
window2 = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
|
||||
0, 0, 50, 50, 0, 0, 0, 0);
|
||||
ddraw = create_ddraw();
|
||||
ok(!!ddraw, "Failed to create a ddraw object.\n");
|
||||
|
||||
|
@ -2878,6 +2885,68 @@ static void test_window_style(void)
|
|||
tmp = GetWindowLongA(window, GWL_EXSTYLE);
|
||||
ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
|
||||
|
||||
ShowWindow(window, SW_SHOW);
|
||||
ret = SetForegroundWindow(GetDesktopWindow());
|
||||
ok(ret, "Failed to set foreground window.\n");
|
||||
SetActiveWindow(window);
|
||||
ok(GetActiveWindow() == window, "Unexpected active window.\n");
|
||||
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
||||
tmp = GetWindowLongA(window, GWL_STYLE);
|
||||
expected_style = style | WS_VISIBLE;
|
||||
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
|
||||
tmp = GetWindowLongA(window, GWL_EXSTYLE);
|
||||
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
|
||||
|
||||
GetWindowRect(window, &r);
|
||||
ok(EqualRect(&r, &fullscreen_rect), "Expected %s, got %s.\n",
|
||||
wine_dbgstr_rect(&fullscreen_rect), wine_dbgstr_rect(&r));
|
||||
|
||||
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
||||
SetWindowPos(window, NULL, 0, 0, 100, 100, SWP_NOZORDER | SWP_NOACTIVATE);
|
||||
GetWindowRect(window, &r);
|
||||
ok(!EqualRect(&r, &fullscreen_rect), "Window resize failed? got %s.\n",
|
||||
wine_dbgstr_rect(&r));
|
||||
|
||||
ret = SetForegroundWindow(window2);
|
||||
ok(ret, "Failed to set foreground window.\n");
|
||||
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
||||
tmp = GetWindowLongA(window, GWL_STYLE);
|
||||
expected_style = style | WS_VISIBLE;
|
||||
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
|
||||
tmp = GetWindowLongA(window, GWL_EXSTYLE);
|
||||
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
|
||||
|
||||
GetWindowRect(window, &r);
|
||||
ok(EqualRect(&r, &fullscreen_rect), "Expected %s, got %s.\n",
|
||||
wine_dbgstr_rect(&fullscreen_rect), wine_dbgstr_rect(&r));
|
||||
|
||||
ret = SetForegroundWindow(window);
|
||||
ok(ret, "Failed to set foreground window.\n");
|
||||
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
||||
tmp = GetWindowLongA(window, GWL_STYLE);
|
||||
expected_style = style | WS_VISIBLE;
|
||||
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
|
||||
tmp = GetWindowLongA(window, GWL_EXSTYLE);
|
||||
expected_style = exstyle | WS_EX_TOPMOST;
|
||||
todo_wine ok(tmp == expected_style, "Expected window extended style %#x, got %#x.\n", expected_style, tmp);
|
||||
|
||||
ShowWindow(window, SW_HIDE);
|
||||
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
||||
tmp = GetWindowLongA(window, GWL_STYLE);
|
||||
ok(tmp == style, "Expected window style %#x, got %#x.\n", style, tmp);
|
||||
tmp = GetWindowLongA(window, GWL_EXSTYLE);
|
||||
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
|
||||
|
||||
ShowWindow(window, SW_SHOW);
|
||||
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
@ -2901,6 +2970,7 @@ static void test_window_style(void)
|
|||
ref = IDirectDraw4_Release(ddraw);
|
||||
ok(ref == 0, "The ddraw object was not properly freed: refcount %u.\n", ref);
|
||||
|
||||
DestroyWindow(window2);
|
||||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
|
@ -6355,10 +6425,12 @@ static void test_unsupported_formats(void)
|
|||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
static void test_rt_caps(void)
|
||||
static void test_rt_caps(const GUID *device_guid)
|
||||
{
|
||||
PALETTEENTRY palette_entries[256];
|
||||
IDirectDrawPalette *palette;
|
||||
BOOL software_device;
|
||||
DWORD expected_caps;
|
||||
IDirectDraw4 *ddraw;
|
||||
DDPIXELFORMAT z_fmt;
|
||||
IDirect3D3 *d3d;
|
||||
|
@ -6377,7 +6449,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
const DDPIXELFORMAT *pf;
|
||||
DWORD caps_in;
|
||||
DWORD caps_out;
|
||||
DWORD caps_out[2];
|
||||
DWORD caps2_in;
|
||||
DWORD caps2_out;
|
||||
HRESULT create_device_hr;
|
||||
|
@ -6388,7 +6460,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
|
||||
0,
|
||||
0,
|
||||
D3D_OK,
|
||||
|
@ -6398,7 +6470,8 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
|
||||
0,
|
||||
0,
|
||||
D3D_OK,
|
||||
|
@ -6408,7 +6481,8 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_OFFSCREENPLAIN,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6418,7 +6492,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
|
||||
0,
|
||||
0,
|
||||
D3DERR_SURFACENOTINVIDMEM,
|
||||
|
@ -6428,7 +6502,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6438,7 +6512,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
|
||||
0,
|
||||
0,
|
||||
D3D_OK,
|
||||
|
@ -6448,7 +6522,8 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
|
||||
0,
|
||||
0,
|
||||
D3D_OK,
|
||||
|
@ -6458,7 +6533,8 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
0,
|
||||
DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_SYSTEMMEMORY},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6468,7 +6544,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
|
||||
0,
|
||||
0,
|
||||
D3DERR_SURFACENOTINVIDMEM,
|
||||
|
@ -6478,7 +6554,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_SYSTEMMEMORY,
|
||||
DDSCAPS_SYSTEMMEMORY,
|
||||
{DDSCAPS_SYSTEMMEMORY},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6488,7 +6564,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY,
|
||||
{DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
|
||||
DDSCAPS2_TEXTUREMANAGE,
|
||||
DDSCAPS2_TEXTUREMANAGE,
|
||||
D3DERR_SURFACENOTINVIDMEM,
|
||||
|
@ -6498,7 +6574,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY,
|
||||
{DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
|
||||
DDSCAPS2_D3DTEXTUREMANAGE,
|
||||
DDSCAPS2_D3DTEXTUREMANAGE,
|
||||
D3DERR_SURFACENOTINVIDMEM,
|
||||
|
@ -6508,7 +6584,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&p8_fmt,
|
||||
0,
|
||||
DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6518,7 +6594,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&p8_fmt,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
|
||||
~0U /* AMD r200 */,
|
||||
{~0u /* AMD r200 */, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
|
||||
0,
|
||||
0,
|
||||
DDERR_NOPALETTEATTACHED,
|
||||
|
@ -6528,7 +6604,8 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&p8_fmt,
|
||||
DDSCAPS_OFFSCREENPLAIN,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6538,7 +6615,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&p8_fmt,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
|
||||
0,
|
||||
0,
|
||||
DDERR_NOPALETTEATTACHED,
|
||||
|
@ -6548,7 +6625,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&p8_fmt,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6558,7 +6635,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&z_fmt,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6568,7 +6645,8 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&z_fmt,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6578,7 +6656,8 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&z_fmt,
|
||||
DDSCAPS_ZBUFFER,
|
||||
DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6588,7 +6667,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&z_fmt,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
|
||||
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6598,7 +6677,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&z_fmt,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER,
|
||||
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6607,11 +6686,13 @@ static void test_rt_caps(void)
|
|||
},
|
||||
};
|
||||
|
||||
software_device = is_software_device_type(device_guid);
|
||||
|
||||
window = create_window();
|
||||
ddraw = create_ddraw();
|
||||
ok(!!ddraw, "Failed to create a ddraw object.\n");
|
||||
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
|
||||
ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
if (FAILED(IDirectDraw4_QueryInterface(ddraw, &IID_IDirect3D3, (void **)&d3d)))
|
||||
{
|
||||
|
@ -6620,17 +6701,17 @@ static void test_rt_caps(void)
|
|||
}
|
||||
|
||||
memset(&z_fmt, 0, sizeof(z_fmt));
|
||||
hr = IDirect3D3_EnumZBufferFormats(d3d, &IID_IDirect3DHALDevice, enum_z_fmt, &z_fmt);
|
||||
hr = IDirect3D3_EnumZBufferFormats(d3d, device_guid, enum_z_fmt, &z_fmt);
|
||||
if (FAILED(hr) || !z_fmt.dwSize)
|
||||
{
|
||||
skip("No depth buffer formats available, skipping test.\n");
|
||||
skip("No depth buffer formats available, software_device %u, skipping test.\n", software_device);
|
||||
IDirect3D3_Release(d3d);
|
||||
goto done;
|
||||
}
|
||||
|
||||
memset(palette_entries, 0, sizeof(palette_entries));
|
||||
hr = IDirectDraw4_CreatePalette(ddraw, DDPCAPS_ALLOW256 | DDPCAPS_8BIT, palette_entries, &palette, NULL);
|
||||
ok(SUCCEEDED(hr), "Failed to create palette, hr %#x.\n", hr);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(test_data); ++i)
|
||||
{
|
||||
|
@ -6651,34 +6732,71 @@ static void test_rt_caps(void)
|
|||
surface_desc.dwWidth = 640;
|
||||
surface_desc.dwHeight = 480;
|
||||
hr = IDirectDraw4_CreateSurface(ddraw, &surface_desc, &surface, NULL);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to create surface with caps %#x and caps2 %#x, hr %#x.\n",
|
||||
i, test_data[i].caps_in, test_data[i].caps2_in, hr);
|
||||
if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY && hr == DDERR_NODIRECTDRAWHW)
|
||||
{
|
||||
skip("No 3d hardware, skipping test %u, software_device %u.\n", i, software_device);
|
||||
continue;
|
||||
}
|
||||
ok(hr == DD_OK || (software_device && (surface_desc.ddsCaps.dwCaps & (DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER))
|
||||
== (DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER) && hr == DDERR_UNSUPPORTED)
|
||||
|| broken(software_device && test_data[i].pf == &p8_fmt && hr == DDERR_INVALIDPIXELFORMAT),
|
||||
"Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
if (FAILED(hr))
|
||||
continue;
|
||||
|
||||
memset(&surface_desc, 0, sizeof(surface_desc));
|
||||
surface_desc.dwSize = sizeof(surface_desc);
|
||||
hr = IDirectDrawSurface4_GetSurfaceDesc(surface, &surface_desc);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to get surface desc, hr %#x.\n", i, hr);
|
||||
ok(test_data[i].caps_out == ~0U || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out,
|
||||
"Test %u: Got unexpected caps %#x, expected %#x.\n",
|
||||
i, surface_desc.ddsCaps.dwCaps, test_data[i].caps_out);
|
||||
ok(surface_desc.ddsCaps.dwCaps2 == test_data[i].caps2_out,
|
||||
"Test %u: Got unexpected caps2 %#x, expected %#x.\n",
|
||||
i, surface_desc.ddsCaps.dwCaps2, test_data[i].caps2_out);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
|
||||
hr = IDirect3D3_CreateDevice(d3d, &IID_IDirect3DHALDevice, surface, &device, NULL);
|
||||
ok(hr == test_data[i].create_device_hr, "Test %u: Got unexpected hr %#x, expected %#x.\n",
|
||||
i, hr, test_data[i].create_device_hr);
|
||||
if (software_device)
|
||||
{
|
||||
expected_caps = test_data[i].caps_out[software_device]
|
||||
? test_data[i].caps_out[software_device] : test_data[i].caps_out[0];
|
||||
|
||||
ok(surface_desc.ddsCaps.dwCaps == expected_caps
|
||||
|| surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0],
|
||||
"Got unexpected caps %#x, test %u, software_device %u.\n",
|
||||
surface_desc.ddsCaps.dwCaps, i, software_device);
|
||||
}
|
||||
else
|
||||
{
|
||||
ok(test_data[i].caps_out[0] == ~0u || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0],
|
||||
"Got unexpected caps %#x, expected %#x, test %u, software_device %u.\n",
|
||||
surface_desc.ddsCaps.dwCaps, test_data[i].caps_out[0], i, software_device);
|
||||
}
|
||||
ok(surface_desc.ddsCaps.dwCaps2 == test_data[i].caps2_out,
|
||||
"Got unexpected caps2 %#x, expected %#x, test %u, software_device %u.\n",
|
||||
surface_desc.ddsCaps.dwCaps2, test_data[i].caps2_out, i, software_device);
|
||||
|
||||
hr = IDirect3D3_CreateDevice(d3d, device_guid, surface, &device, NULL);
|
||||
|
||||
todo_wine_if(software_device && test_data[i].create_device_hr == D3DERR_SURFACENOTINVIDMEM)
|
||||
ok((!software_device && hr == test_data[i].create_device_hr)
|
||||
|| (software_device && (hr == (test_data[i].create_device_hr == D3DERR_SURFACENOTINVIDMEM
|
||||
? DD_OK : test_data[i].create_device_hr))),
|
||||
"Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
if (hr == DDERR_NOPALETTEATTACHED)
|
||||
{
|
||||
hr = IDirectDrawSurface4_SetPalette(surface, palette);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to set palette, hr %#x.\n", i, hr);
|
||||
hr = IDirect3D3_CreateDevice(d3d, &IID_IDirect3DHALDevice, surface, &device, NULL);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
if (software_device)
|
||||
{
|
||||
/* _CreateDevice succeeds with software device, but the palette gets extra reference
|
||||
* on Windows (probably due to a bug) which doesn't go away on the device and surface
|
||||
* destruction and ddraw is not destroyed cleanly, so skipping this test. */
|
||||
IDirectDrawSurface4_Release(surface);
|
||||
continue;
|
||||
}
|
||||
hr = IDirect3D3_CreateDevice(d3d, device_guid, surface, &device, NULL);
|
||||
if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY)
|
||||
ok(hr == DDERR_INVALIDPIXELFORMAT, "Test %u: Got unexpected hr %#x.\n", i, hr);
|
||||
ok(hr == DDERR_INVALIDPIXELFORMAT, "Got unexpected hr %#x, test %u, software_device %u.\n",
|
||||
hr, i, software_device);
|
||||
else
|
||||
ok(hr == D3DERR_SURFACENOTINVIDMEM, "Test %u: Got unexpected hr %#x.\n", i, hr);
|
||||
ok(hr == D3DERR_SURFACENOTINVIDMEM, "Got unexpected hr %#x, test %u, software_device %u.\n",
|
||||
hr, i, software_device);
|
||||
}
|
||||
IDirectDrawSurface4_Release(surface);
|
||||
|
||||
|
@ -6689,10 +6807,10 @@ static void test_rt_caps(void)
|
|||
surface_desc.dwWidth = 640;
|
||||
surface_desc.dwHeight = 480;
|
||||
hr = IDirectDraw4_CreateSurface(ddraw, &surface_desc, &surface, NULL);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to create surface, hr %#x.\n", i, hr);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
|
||||
hr = IDirect3D3_CreateDevice(d3d, &IID_IDirect3DHALDevice, surface, &device, NULL);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to create device, hr %#x.\n", i, hr);
|
||||
hr = IDirect3D3_CreateDevice(d3d, device_guid, surface, &device, NULL);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
}
|
||||
|
||||
memset(&surface_desc, 0, sizeof(surface_desc));
|
||||
|
@ -6708,21 +6826,21 @@ static void test_rt_caps(void)
|
|||
surface_desc.dwWidth = 640;
|
||||
surface_desc.dwHeight = 480;
|
||||
hr = IDirectDraw4_CreateSurface(ddraw, &surface_desc, &rt, NULL);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to create surface with caps %#x, hr %#x.\n",
|
||||
i, test_data[i].caps_in, hr);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
|
||||
hr = IDirect3DDevice3_SetRenderTarget(device, rt, 0);
|
||||
ok(hr == test_data[i].set_rt_hr || broken(hr == test_data[i].alternative_set_rt_hr),
|
||||
"Test %u: Got unexpected hr %#x, expected %#x.\n",
|
||||
i, hr, test_data[i].set_rt_hr);
|
||||
ok(hr == test_data[i].set_rt_hr || (software_device && hr == DDERR_NOPALETTEATTACHED)
|
||||
|| broken(hr == test_data[i].alternative_set_rt_hr),
|
||||
"Got unexpected hr %#x, test %u, software_device %u.\n",
|
||||
hr, i, software_device);
|
||||
if (SUCCEEDED(hr) || hr == DDERR_INVALIDPIXELFORMAT)
|
||||
expected_rt = rt;
|
||||
else
|
||||
expected_rt = surface;
|
||||
|
||||
hr = IDirect3DDevice3_GetRenderTarget(device, &tmp);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to get render target, hr %#x.\n", i, hr);
|
||||
ok(tmp == expected_rt, "Test %u: Got unexpected rt %p.\n", i, tmp);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
ok(tmp == expected_rt, "Got unexpected rt %p, test %u, software_device %u.\n", tmp, i, software_device);
|
||||
|
||||
IDirectDrawSurface4_Release(tmp);
|
||||
IDirectDrawSurface4_Release(rt);
|
||||
|
@ -6732,7 +6850,8 @@ static void test_rt_caps(void)
|
|||
ok(refcount == 0, "Test %u: The surface was not properly freed, refcount %u.\n", i, refcount);
|
||||
}
|
||||
|
||||
IDirectDrawPalette_Release(palette);
|
||||
refcount = IDirectDrawPalette_Release(palette);
|
||||
ok(!refcount, "Got unexpected refcount %u.\n", refcount);
|
||||
IDirect3D3_Release(d3d);
|
||||
|
||||
done:
|
||||
|
@ -18271,6 +18390,12 @@ done:
|
|||
IDirectDraw4_Release(ddraw);
|
||||
}
|
||||
|
||||
static void run_for_each_device_type(void (*test_func)(const GUID *))
|
||||
{
|
||||
test_func(&IID_IDirect3DHALDevice);
|
||||
test_func(&IID_IDirect3DRGBDevice);
|
||||
}
|
||||
|
||||
START_TEST(ddraw4)
|
||||
{
|
||||
DDDEVICEIDENTIFIER identifier;
|
||||
|
@ -18343,7 +18468,7 @@ START_TEST(ddraw4)
|
|||
test_texturemanage();
|
||||
test_block_formats_creation();
|
||||
test_unsupported_formats();
|
||||
test_rt_caps();
|
||||
run_for_each_device_type(test_rt_caps);
|
||||
test_primary_caps();
|
||||
test_surface_lock();
|
||||
test_surface_discard();
|
||||
|
|
|
@ -30,6 +30,7 @@ HRESULT WINAPI GetSurfaceFromDC(HDC dc, struct IDirectDrawSurface **surface, HDC
|
|||
static HRESULT (WINAPI *pDirectDrawCreateEx)(GUID *guid, void **ddraw, REFIID iid, IUnknown *outer_unknown);
|
||||
static BOOL is_ddraw64 = sizeof(DWORD) != sizeof(DWORD *);
|
||||
static DEVMODEW registry_mode;
|
||||
static const GUID *hw_device_guid = &IID_IDirect3DHALDevice;
|
||||
|
||||
static HRESULT (WINAPI *pDwmIsCompositionEnabled)(BOOL *);
|
||||
|
||||
|
@ -190,6 +191,11 @@ static BOOL ddraw_is_amd(IDirectDraw7 *ddraw)
|
|||
return ddraw_is_vendor(ddraw, 0x1002);
|
||||
}
|
||||
|
||||
static BOOL is_software_device_type(const GUID *device_guid)
|
||||
{
|
||||
return device_guid != &IID_IDirect3DTnLHalDevice && device_guid != &IID_IDirect3DHALDevice;
|
||||
}
|
||||
|
||||
static IDirectDrawSurface7 *create_overlay(IDirectDraw7 *ddraw,
|
||||
unsigned int width, unsigned int height, DWORD format)
|
||||
{
|
||||
|
@ -2475,14 +2481,16 @@ static void test_window_style(void)
|
|||
{
|
||||
LONG style, exstyle, tmp, expected_style;
|
||||
RECT fullscreen_rect, r;
|
||||
HWND window, window2;
|
||||
IDirectDraw7 *ddraw;
|
||||
HWND window;
|
||||
HRESULT hr;
|
||||
ULONG ref;
|
||||
BOOL ret;
|
||||
|
||||
window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW,
|
||||
0, 0, 100, 100, 0, 0, 0, 0);
|
||||
window2 = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
|
||||
0, 0, 50, 50, 0, 0, 0, 0);
|
||||
ddraw = create_ddraw();
|
||||
ok(!!ddraw, "Failed to create a ddraw object.\n");
|
||||
|
||||
|
@ -2526,6 +2534,68 @@ static void test_window_style(void)
|
|||
tmp = GetWindowLongA(window, GWL_EXSTYLE);
|
||||
ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
|
||||
|
||||
ShowWindow(window, SW_SHOW);
|
||||
ret = SetForegroundWindow(GetDesktopWindow());
|
||||
ok(ret, "Failed to set foreground window.\n");
|
||||
SetActiveWindow(window);
|
||||
ok(GetActiveWindow() == window, "Unexpected active window.\n");
|
||||
hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
||||
tmp = GetWindowLongA(window, GWL_STYLE);
|
||||
expected_style = style | WS_VISIBLE;
|
||||
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
|
||||
tmp = GetWindowLongA(window, GWL_EXSTYLE);
|
||||
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
|
||||
|
||||
GetWindowRect(window, &r);
|
||||
ok(EqualRect(&r, &fullscreen_rect), "Expected %s, got %s.\n",
|
||||
wine_dbgstr_rect(&fullscreen_rect), wine_dbgstr_rect(&r));
|
||||
|
||||
hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
||||
SetWindowPos(window, NULL, 0, 0, 100, 100, SWP_NOZORDER | SWP_NOACTIVATE);
|
||||
GetWindowRect(window, &r);
|
||||
ok(!EqualRect(&r, &fullscreen_rect), "Window resize failed? got %s.\n",
|
||||
wine_dbgstr_rect(&r));
|
||||
|
||||
ret = SetForegroundWindow(window2);
|
||||
ok(ret, "Failed to set foreground window.\n");
|
||||
hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
||||
tmp = GetWindowLongA(window, GWL_STYLE);
|
||||
expected_style = style | WS_VISIBLE;
|
||||
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
|
||||
tmp = GetWindowLongA(window, GWL_EXSTYLE);
|
||||
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
|
||||
|
||||
GetWindowRect(window, &r);
|
||||
ok(EqualRect(&r, &fullscreen_rect), "Expected %s, got %s.\n",
|
||||
wine_dbgstr_rect(&fullscreen_rect), wine_dbgstr_rect(&r));
|
||||
|
||||
ret = SetForegroundWindow(window);
|
||||
ok(ret, "Failed to set foreground window.\n");
|
||||
hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
||||
tmp = GetWindowLongA(window, GWL_STYLE);
|
||||
expected_style = style | WS_VISIBLE;
|
||||
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
|
||||
tmp = GetWindowLongA(window, GWL_EXSTYLE);
|
||||
expected_style = exstyle | WS_EX_TOPMOST;
|
||||
todo_wine ok(tmp == expected_style, "Expected window extended style %#x, got %#x.\n", expected_style, tmp);
|
||||
|
||||
ShowWindow(window, SW_HIDE);
|
||||
hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
||||
tmp = GetWindowLongA(window, GWL_STYLE);
|
||||
ok(tmp == style, "Expected window style %#x, got %#x.\n", style, tmp);
|
||||
tmp = GetWindowLongA(window, GWL_EXSTYLE);
|
||||
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
|
||||
|
||||
ShowWindow(window, SW_SHOW);
|
||||
hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
|
||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||
|
@ -2549,6 +2619,7 @@ static void test_window_style(void)
|
|||
ref = IDirectDraw7_Release(ddraw);
|
||||
ok(ref == 0, "The ddraw object was not properly freed: refcount %u.\n", ref);
|
||||
|
||||
DestroyWindow(window2);
|
||||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
|
@ -6085,13 +6156,13 @@ static void test_unsupported_formats(void)
|
|||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
static void test_rt_caps(void)
|
||||
static void test_rt_caps(const GUID *device_guid)
|
||||
{
|
||||
const GUID *devtype = &IID_IDirect3DHALDevice;
|
||||
PALETTEENTRY palette_entries[256];
|
||||
IDirectDrawPalette *palette;
|
||||
BOOL software_device;
|
||||
DWORD expected_caps;
|
||||
IDirectDraw7 *ddraw;
|
||||
BOOL hal_ok = FALSE;
|
||||
DDPIXELFORMAT z_fmt;
|
||||
IDirect3D7 *d3d;
|
||||
unsigned int i;
|
||||
|
@ -6109,7 +6180,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
const DDPIXELFORMAT *pf;
|
||||
DWORD caps_in;
|
||||
DWORD caps_out;
|
||||
DWORD caps_out[2];
|
||||
DWORD caps2_in;
|
||||
DWORD caps2_out;
|
||||
HRESULT create_device_hr;
|
||||
|
@ -6120,7 +6191,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
|
||||
0,
|
||||
0,
|
||||
D3D_OK,
|
||||
|
@ -6130,7 +6201,8 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
|
||||
0,
|
||||
0,
|
||||
D3D_OK,
|
||||
|
@ -6140,7 +6212,8 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_OFFSCREENPLAIN,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6150,7 +6223,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
|
||||
0,
|
||||
0,
|
||||
D3DERR_SURFACENOTINVIDMEM,
|
||||
|
@ -6160,7 +6233,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6170,7 +6243,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
|
||||
0,
|
||||
0,
|
||||
D3D_OK,
|
||||
|
@ -6180,7 +6253,8 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
|
||||
0,
|
||||
0,
|
||||
D3D_OK,
|
||||
|
@ -6190,7 +6264,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
0,
|
||||
DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, DDSCAPS_SYSTEMMEMORY},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6200,7 +6274,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
|
||||
0,
|
||||
0,
|
||||
D3DERR_SURFACENOTINVIDMEM,
|
||||
|
@ -6210,7 +6284,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_SYSTEMMEMORY,
|
||||
DDSCAPS_SYSTEMMEMORY,
|
||||
{DDSCAPS_SYSTEMMEMORY},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6220,7 +6294,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY,
|
||||
{DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
|
||||
DDSCAPS2_TEXTUREMANAGE,
|
||||
DDSCAPS2_TEXTUREMANAGE,
|
||||
D3DERR_SURFACENOTINVIDMEM,
|
||||
|
@ -6230,7 +6304,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
NULL,
|
||||
DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY,
|
||||
{DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
|
||||
DDSCAPS2_D3DTEXTUREMANAGE,
|
||||
DDSCAPS2_D3DTEXTUREMANAGE,
|
||||
D3DERR_SURFACENOTINVIDMEM,
|
||||
|
@ -6240,7 +6314,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&p8_fmt,
|
||||
0,
|
||||
DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6250,7 +6324,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&p8_fmt,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
|
||||
~0U /* AMD r200 */,
|
||||
{~0u /* AMD r200 */, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
|
||||
0,
|
||||
0,
|
||||
DDERR_NOPALETTEATTACHED,
|
||||
|
@ -6260,7 +6334,8 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&p8_fmt,
|
||||
DDSCAPS_OFFSCREENPLAIN,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6270,7 +6345,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&p8_fmt,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
|
||||
0,
|
||||
0,
|
||||
DDERR_NOPALETTEATTACHED,
|
||||
|
@ -6280,7 +6355,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&p8_fmt,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
|
||||
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
|
||||
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6290,7 +6365,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&z_fmt,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6300,7 +6375,8 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&z_fmt,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6310,7 +6386,8 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&z_fmt,
|
||||
DDSCAPS_ZBUFFER,
|
||||
DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
|
||||
{DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6320,7 +6397,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&z_fmt,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
|
||||
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6330,7 +6407,7 @@ static void test_rt_caps(void)
|
|||
{
|
||||
&z_fmt,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER,
|
||||
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER,
|
||||
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
|
||||
0,
|
||||
0,
|
||||
DDERR_INVALIDCAPS,
|
||||
|
@ -6339,6 +6416,8 @@ static void test_rt_caps(void)
|
|||
},
|
||||
};
|
||||
|
||||
software_device = is_software_device_type(device_guid);
|
||||
|
||||
window = create_window();
|
||||
ddraw = create_ddraw();
|
||||
ok(!!ddraw, "Failed to create a ddraw object.\n");
|
||||
|
@ -6351,23 +6430,18 @@ static void test_rt_caps(void)
|
|||
goto done;
|
||||
}
|
||||
|
||||
hr = IDirect3D7_EnumDevices(d3d, enum_devtype_cb, &hal_ok);
|
||||
ok(SUCCEEDED(hr), "Failed to enumerate devices, hr %#x.\n", hr);
|
||||
if (hal_ok)
|
||||
devtype = &IID_IDirect3DTnLHalDevice;
|
||||
|
||||
memset(&z_fmt, 0, sizeof(z_fmt));
|
||||
hr = IDirect3D7_EnumZBufferFormats(d3d, devtype, enum_z_fmt, &z_fmt);
|
||||
hr = IDirect3D7_EnumZBufferFormats(d3d, device_guid, enum_z_fmt, &z_fmt);
|
||||
if (FAILED(hr) || !z_fmt.dwSize)
|
||||
{
|
||||
skip("No depth buffer formats available, skipping test.\n");
|
||||
skip("No depth buffer formats available, software_device %u, skipping test.\n", software_device);
|
||||
IDirect3D7_Release(d3d);
|
||||
goto done;
|
||||
}
|
||||
|
||||
memset(palette_entries, 0, sizeof(palette_entries));
|
||||
hr = IDirectDraw7_CreatePalette(ddraw, DDPCAPS_ALLOW256 | DDPCAPS_8BIT, palette_entries, &palette, NULL);
|
||||
ok(SUCCEEDED(hr), "Failed to create palette, hr %#x.\n", hr);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(test_data); ++i)
|
||||
{
|
||||
|
@ -6388,34 +6462,68 @@ static void test_rt_caps(void)
|
|||
surface_desc.dwWidth = 640;
|
||||
surface_desc.dwHeight = 480;
|
||||
hr = IDirectDraw7_CreateSurface(ddraw, &surface_desc, &surface, NULL);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to create surface with caps %#x and caps2 %#x, hr %#x.\n",
|
||||
i, test_data[i].caps_in, test_data[i].caps2_in, hr);
|
||||
if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY && hr == DDERR_NODIRECTDRAWHW)
|
||||
{
|
||||
skip("No 3d hardware, skipping test %u, software_device %u.\n", i, software_device);
|
||||
continue;
|
||||
}
|
||||
ok(hr == DD_OK || (software_device && (surface_desc.ddsCaps.dwCaps & (DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER))
|
||||
== (DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER) && hr == DDERR_UNSUPPORTED)
|
||||
|| broken(software_device && test_data[i].pf == &p8_fmt && hr == DDERR_INVALIDPIXELFORMAT),
|
||||
"Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
if (FAILED(hr))
|
||||
continue;
|
||||
|
||||
memset(&surface_desc, 0, sizeof(surface_desc));
|
||||
surface_desc.dwSize = sizeof(surface_desc);
|
||||
hr = IDirectDrawSurface7_GetSurfaceDesc(surface, &surface_desc);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to get surface desc, hr %#x.\n", i, hr);
|
||||
ok(test_data[i].caps_out == ~0U || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out,
|
||||
"Test %u: Got unexpected caps %#x, expected %#x.\n",
|
||||
i, surface_desc.ddsCaps.dwCaps, test_data[i].caps_out);
|
||||
ok(surface_desc.ddsCaps.dwCaps2 == test_data[i].caps2_out,
|
||||
"Test %u: Got unexpected caps2 %#x, expected %#x.\n",
|
||||
i, surface_desc.ddsCaps.dwCaps2, test_data[i].caps2_out);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
|
||||
hr = IDirect3D7_CreateDevice(d3d, devtype, surface, &device);
|
||||
ok(hr == test_data[i].create_device_hr, "Test %u: Got unexpected hr %#x, expected %#x.\n",
|
||||
i, hr, test_data[i].create_device_hr);
|
||||
if (software_device)
|
||||
{
|
||||
expected_caps = test_data[i].caps_out[software_device]
|
||||
? test_data[i].caps_out[software_device] : test_data[i].caps_out[0];
|
||||
|
||||
todo_wine_if(test_data[i].caps_out[software_device]
|
||||
&& surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0])
|
||||
ok(surface_desc.ddsCaps.dwCaps == expected_caps
|
||||
|| broken(surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0]),
|
||||
"Got unexpected caps %#x, test %u, software_device %u.\n",
|
||||
surface_desc.ddsCaps.dwCaps, i, software_device);
|
||||
}
|
||||
else
|
||||
{
|
||||
ok(test_data[i].caps_out[0] == ~0u || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0],
|
||||
"Got unexpected caps %#x, expected %#x, test %u, software_device %u.\n",
|
||||
surface_desc.ddsCaps.dwCaps, test_data[i].caps_out[0], i, software_device);
|
||||
}
|
||||
ok(surface_desc.ddsCaps.dwCaps2 == test_data[i].caps2_out,
|
||||
"Got unexpected caps2 %#x, expected %#x, test %u, software_device %u.\n",
|
||||
surface_desc.ddsCaps.dwCaps2, test_data[i].caps2_out, i, software_device);
|
||||
|
||||
hr = IDirect3D7_CreateDevice(d3d, device_guid, surface, &device);
|
||||
todo_wine_if(software_device && test_data[i].create_device_hr == D3DERR_SURFACENOTINVIDMEM)
|
||||
ok((!software_device && hr == test_data[i].create_device_hr)
|
||||
|| (software_device && (hr == (test_data[i].create_device_hr == D3DERR_SURFACENOTINVIDMEM
|
||||
? DD_OK : test_data[i].create_device_hr))),
|
||||
"Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
if (hr == DDERR_NOPALETTEATTACHED)
|
||||
{
|
||||
hr = IDirectDrawSurface7_SetPalette(surface, palette);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to set palette, hr %#x.\n", i, hr);
|
||||
hr = IDirect3D7_CreateDevice(d3d, devtype, surface, &device);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
hr = IDirect3D7_CreateDevice(d3d, device_guid, surface, &device);
|
||||
if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY)
|
||||
ok(hr == DDERR_INVALIDPIXELFORMAT, "Test %u: Got unexpected hr %#x.\n", i, hr);
|
||||
ok(hr == DDERR_INVALIDPIXELFORMAT, "Got unexpected hr %#x, test %u, software_device %u.\n",
|
||||
hr, i, software_device);
|
||||
else if (software_device)
|
||||
todo_wine
|
||||
ok(hr == E_FAIL, "Got unexpected hr %#x, test %u, software_device %u.\n",
|
||||
hr, i, software_device);
|
||||
else
|
||||
ok(hr == D3DERR_SURFACENOTINVIDMEM, "Test %u: Got unexpected hr %#x.\n", i, hr);
|
||||
ok(hr == D3DERR_SURFACENOTINVIDMEM, "Got unexpected hr %#x, test %u, software_device %u.\n",
|
||||
hr, i, software_device);
|
||||
}
|
||||
IDirectDrawSurface7_Release(surface);
|
||||
|
||||
|
@ -6426,10 +6534,10 @@ static void test_rt_caps(void)
|
|||
surface_desc.dwWidth = 640;
|
||||
surface_desc.dwHeight = 480;
|
||||
hr = IDirectDraw7_CreateSurface(ddraw, &surface_desc, &surface, NULL);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to create surface, hr %#x.\n", i, hr);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
|
||||
hr = IDirect3D7_CreateDevice(d3d, devtype, surface, &device);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to create device, hr %#x.\n", i, hr);
|
||||
hr = IDirect3D7_CreateDevice(d3d, device_guid, surface, &device);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
}
|
||||
|
||||
memset(&surface_desc, 0, sizeof(surface_desc));
|
||||
|
@ -6445,21 +6553,21 @@ static void test_rt_caps(void)
|
|||
surface_desc.dwWidth = 640;
|
||||
surface_desc.dwHeight = 480;
|
||||
hr = IDirectDraw7_CreateSurface(ddraw, &surface_desc, &rt, NULL);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to create surface with caps %#x, hr %#x.\n",
|
||||
i, test_data[i].caps_in, hr);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
|
||||
hr = IDirect3DDevice7_SetRenderTarget(device, rt, 0);
|
||||
ok(hr == test_data[i].set_rt_hr || broken(hr == test_data[i].alternative_set_rt_hr),
|
||||
"Test %u: Got unexpected hr %#x, expected %#x.\n",
|
||||
i, hr, test_data[i].set_rt_hr);
|
||||
ok(hr == test_data[i].set_rt_hr || (software_device && hr == DDERR_NOPALETTEATTACHED)
|
||||
|| broken(hr == test_data[i].alternative_set_rt_hr),
|
||||
"Got unexpected hr %#x, test %u, software_device %u.\n",
|
||||
hr, i, software_device);
|
||||
if (SUCCEEDED(hr) || hr == DDERR_INVALIDPIXELFORMAT)
|
||||
expected_rt = rt;
|
||||
else
|
||||
expected_rt = surface;
|
||||
|
||||
hr = IDirect3DDevice7_GetRenderTarget(device, &tmp);
|
||||
ok(SUCCEEDED(hr), "Test %u: Failed to get render target, hr %#x.\n", i, hr);
|
||||
ok(tmp == expected_rt, "Test %u: Got unexpected rt %p.\n", i, tmp);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
|
||||
ok(tmp == expected_rt, "Got unexpected rt %p, test %u, software_device %u.\n", tmp, i, software_device);
|
||||
|
||||
IDirectDrawSurface7_Release(tmp);
|
||||
IDirectDrawSurface7_Release(rt);
|
||||
|
@ -6469,7 +6577,8 @@ static void test_rt_caps(void)
|
|||
ok(refcount == 0, "Test %u: The surface was not properly freed, refcount %u.\n", i, refcount);
|
||||
}
|
||||
|
||||
IDirectDrawPalette_Release(palette);
|
||||
refcount = IDirectDrawPalette_Release(palette);
|
||||
ok(!refcount, "Got unexpected refcount %u.\n", refcount);
|
||||
IDirect3D7_Release(d3d);
|
||||
|
||||
done:
|
||||
|
@ -18533,12 +18642,21 @@ done:
|
|||
IDirectDraw7_Release(ddraw);
|
||||
}
|
||||
|
||||
static void run_for_each_device_type(void (*test_func)(const GUID *))
|
||||
{
|
||||
test_func(hw_device_guid);
|
||||
test_func(&IID_IDirect3DRGBDevice);
|
||||
}
|
||||
|
||||
START_TEST(ddraw7)
|
||||
{
|
||||
DDDEVICEIDENTIFIER2 identifier;
|
||||
HMODULE module, dwmapi;
|
||||
DEVMODEW current_mode;
|
||||
IDirectDraw7 *ddraw;
|
||||
IDirect3D7 *d3d;
|
||||
BOOL hal_ok;
|
||||
HRESULT hr;
|
||||
|
||||
module = GetModuleHandleA("ddraw.dll");
|
||||
if (!(pDirectDrawCreateEx = (void *)GetProcAddress(module, "DirectDrawCreateEx")))
|
||||
|
@ -18561,6 +18679,20 @@ START_TEST(ddraw7)
|
|||
HIWORD(U(identifier.liDriverVersion).HighPart), LOWORD(U(identifier.liDriverVersion).HighPart),
|
||||
HIWORD(U(identifier.liDriverVersion).LowPart), LOWORD(U(identifier.liDriverVersion).LowPart));
|
||||
}
|
||||
|
||||
if (IDirectDraw7_QueryInterface(ddraw, &IID_IDirect3D7, (void **)&d3d) == DD_OK)
|
||||
{
|
||||
hr = IDirect3D7_EnumDevices(d3d, enum_devtype_cb, &hal_ok);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
if (hal_ok)
|
||||
hw_device_guid = &IID_IDirect3DTnLHalDevice;
|
||||
IDirectDraw7_Release(d3d);
|
||||
}
|
||||
else
|
||||
{
|
||||
trace("D3D interface is not available.\n");
|
||||
}
|
||||
|
||||
IDirectDraw7_Release(ddraw);
|
||||
|
||||
memset(¤t_mode, 0, sizeof(current_mode));
|
||||
|
@ -18612,7 +18744,7 @@ START_TEST(ddraw7)
|
|||
test_texturemanage();
|
||||
test_block_formats_creation();
|
||||
test_unsupported_formats();
|
||||
test_rt_caps();
|
||||
run_for_each_device_type(test_rt_caps);
|
||||
test_primary_caps();
|
||||
test_surface_lock();
|
||||
test_surface_discard();
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
MODULE = dhtmled.ocx
|
||||
IMPORTS = uuid
|
||||
IMPORTS = uuid ole32 user32 gdi32
|
||||
|
||||
EXTRADLLFLAGS = -mno-cygwin
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright 2017 Alex Henrie
|
||||
* Copyright 2021 Vijay Kiran Kamuju
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -29,7 +30,9 @@ typedef struct
|
|||
IDHTMLEdit IDHTMLEdit_iface;
|
||||
IOleObject IOleObject_iface;
|
||||
IPersistStreamInit IPersistStreamInit_iface;
|
||||
IOleControl IOleControl_iface;
|
||||
IOleClientSite *client_site;
|
||||
SIZEL extent;
|
||||
LONG ref;
|
||||
} DHTMLEditImpl;
|
||||
|
||||
|
@ -48,6 +51,11 @@ static inline DHTMLEditImpl *impl_from_IPersistStreamInit(IPersistStreamInit *if
|
|||
return CONTAINING_RECORD(iface, DHTMLEditImpl, IPersistStreamInit_iface);
|
||||
}
|
||||
|
||||
static inline DHTMLEditImpl *impl_from_IOleControl(IOleControl *iface)
|
||||
{
|
||||
return CONTAINING_RECORD(iface, DHTMLEditImpl, IOleControl_iface);
|
||||
}
|
||||
|
||||
static ULONG dhtml_edit_addref(DHTMLEditImpl *This)
|
||||
{
|
||||
LONG ref = InterlockedIncrement(&This->ref);
|
||||
|
@ -81,6 +89,12 @@ static HRESULT dhtml_edit_qi(DHTMLEditImpl *This, REFIID iid, void **out)
|
|||
*out = &This->IPersistStreamInit_iface;
|
||||
return S_OK;
|
||||
}
|
||||
else if(IsEqualGUID(iid, &IID_IOleControl))
|
||||
{
|
||||
dhtml_edit_addref(This);
|
||||
*out = &This->IOleControl_iface;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
*out = NULL;
|
||||
ERR("no interface for %s\n", debugstr_guid(iid));
|
||||
|
@ -177,7 +191,7 @@ static HRESULT WINAPI DHTMLEdit_NewDocument(IDHTMLEdit *iface)
|
|||
{
|
||||
DHTMLEditImpl *This = impl_from_IDHTMLEdit(iface);
|
||||
FIXME("(%p)->() stub\n", This);
|
||||
return E_NOTIMPL;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DHTMLEdit_LoadURL(IDHTMLEdit *iface, BSTR url)
|
||||
|
@ -700,15 +714,25 @@ static HRESULT WINAPI OleObject_GetUserType(IOleObject *iface, DWORD type_type,
|
|||
static HRESULT WINAPI OleObject_SetExtent(IOleObject *iface, DWORD aspect, SIZEL *size_limit)
|
||||
{
|
||||
DHTMLEditImpl *This = impl_from_IOleObject(iface);
|
||||
FIXME("(%p)->(%u, %p) stub\n", This, aspect, size_limit);
|
||||
return E_NOTIMPL;
|
||||
TRACE("(%p)->(%u, %p)\n", This, aspect, size_limit);
|
||||
|
||||
if(aspect != DVASPECT_CONTENT)
|
||||
return DV_E_DVASPECT;
|
||||
|
||||
This->extent = *size_limit;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI OleObject_GetExtent(IOleObject *iface, DWORD aspect, SIZEL *size_limit)
|
||||
{
|
||||
DHTMLEditImpl *This = impl_from_IOleObject(iface);
|
||||
FIXME("(%p)->(%u, %p) stub\n", This, aspect, size_limit);
|
||||
return E_NOTIMPL;
|
||||
TRACE("(%p)->(%u, %p)\n", This, aspect, size_limit);
|
||||
|
||||
if(aspect != DVASPECT_CONTENT)
|
||||
return E_FAIL;
|
||||
|
||||
*size_limit = This->extent;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI OleObject_Advise(IOleObject *iface, IAdviseSink *sink, DWORD *conn)
|
||||
|
@ -737,9 +761,9 @@ static HRESULT WINAPI OleObject_EnumAdvise(IOleObject *iface, IEnumSTATDATA **ad
|
|||
static HRESULT WINAPI OleObject_GetMiscStatus(IOleObject *iface, DWORD aspect, DWORD *status)
|
||||
{
|
||||
DHTMLEditImpl *This = impl_from_IOleObject(iface);
|
||||
FIXME("(%p)->(%u, %p) stub\n", This, aspect, status);
|
||||
*status = 0;
|
||||
return E_NOTIMPL;
|
||||
TRACE("(%p)->(%u, %p)\n", This, aspect, status);
|
||||
|
||||
return OleRegGetMiscStatus(&CLSID_DHTMLEdit, aspect, status);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI OleObject_SetColorScheme(IOleObject *iface, LOGPALETTE *palette)
|
||||
|
@ -846,9 +870,64 @@ static const IPersistStreamInitVtbl PersistStreamInitVtbl = {
|
|||
PersistStreamInit_InitNew
|
||||
};
|
||||
|
||||
static HRESULT WINAPI OleControl_QueryInterface(IOleControl *iface, REFIID iid, void **out)
|
||||
{
|
||||
return dhtml_edit_qi(impl_from_IOleControl(iface), iid, out);
|
||||
}
|
||||
|
||||
static ULONG WINAPI OleControl_AddRef(IOleControl *iface)
|
||||
{
|
||||
return dhtml_edit_addref(impl_from_IOleControl(iface));
|
||||
}
|
||||
|
||||
static ULONG WINAPI OleControl_Release(IOleControl *iface)
|
||||
{
|
||||
return dhtml_edit_release(impl_from_IOleControl(iface));
|
||||
}
|
||||
|
||||
static HRESULT WINAPI OleControl_GetControlInfo(IOleControl *iface, CONTROLINFO *pCI)
|
||||
{
|
||||
DHTMLEditImpl *This = impl_from_IOleControl(iface);
|
||||
FIXME("(%p)->(%p)\n", This, pCI);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI OleControl_OnMnemonic(IOleControl *iface, MSG *msg)
|
||||
{
|
||||
DHTMLEditImpl *This = impl_from_IOleControl(iface);
|
||||
FIXME("(%p)->(%p)\n", This, msg);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI OleControl_OnAmbientPropertyChange(IOleControl *iface, DISPID dispID)
|
||||
{
|
||||
DHTMLEditImpl *This = impl_from_IOleControl(iface);
|
||||
FIXME("(%p)->(%d)\n", This, dispID);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI OleControl_FreezeEvents(IOleControl *iface, BOOL freeze)
|
||||
{
|
||||
DHTMLEditImpl *This = impl_from_IOleControl(iface);
|
||||
FIXME("(%p)->(%x)\n", This, freeze);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static const IOleControlVtbl OleControlVtbl = {
|
||||
OleControl_QueryInterface,
|
||||
OleControl_AddRef,
|
||||
OleControl_Release,
|
||||
OleControl_GetControlInfo,
|
||||
OleControl_OnMnemonic,
|
||||
OleControl_OnAmbientPropertyChange,
|
||||
OleControl_FreezeEvents
|
||||
};
|
||||
|
||||
HRESULT dhtml_edit_create(REFIID iid, void **out)
|
||||
{
|
||||
DHTMLEditImpl *This;
|
||||
DWORD dpi_x, dpi_y;
|
||||
HDC hdc;
|
||||
HRESULT ret;
|
||||
|
||||
TRACE("(%s, %p)\n", debugstr_guid(iid), out);
|
||||
|
@ -860,9 +939,18 @@ HRESULT dhtml_edit_create(REFIID iid, void **out)
|
|||
This->IDHTMLEdit_iface.lpVtbl = &DHTMLEditVtbl;
|
||||
This->IOleObject_iface.lpVtbl = &OleObjectVtbl;
|
||||
This->IPersistStreamInit_iface.lpVtbl = &PersistStreamInitVtbl;
|
||||
This->IOleControl_iface.lpVtbl = &OleControlVtbl;
|
||||
This->client_site = NULL;
|
||||
This->ref = 1;
|
||||
|
||||
hdc = GetDC(0);
|
||||
dpi_x = GetDeviceCaps(hdc, LOGPIXELSX);
|
||||
dpi_y = GetDeviceCaps(hdc, LOGPIXELSY);
|
||||
ReleaseDC(0, hdc);
|
||||
|
||||
This->extent.cx = MulDiv(192, 2540, dpi_x);
|
||||
This->extent.cy = MulDiv(192, 2540, dpi_y);
|
||||
|
||||
ret = IDHTMLEdit_QueryInterface(&This->IDHTMLEdit_iface, iid, out);
|
||||
IDHTMLEdit_Release(&This->IDHTMLEdit_iface);
|
||||
return ret;
|
||||
|
|
|
@ -1268,8 +1268,10 @@ static HRESULT WINAPI IDirectInput8WImpl_EnumDevicesBySemantics(
|
|||
if (lpCallback(&didevis[i], lpdid, callbackFlags, --remain, pvRef) == DIENUM_STOP)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, didevis);
|
||||
IDirectInputDevice_Release(lpdid);
|
||||
return DI_OK;
|
||||
}
|
||||
IDirectInputDevice_Release(lpdid);
|
||||
}
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, didevis);
|
||||
|
@ -1287,7 +1289,11 @@ static HRESULT WINAPI IDirectInput8WImpl_EnumDevicesBySemantics(
|
|||
IDirectInputDevice_GetDeviceInfo(lpdid, &didevi);
|
||||
|
||||
if (lpCallback(&didevi, lpdid, callbackFlags, --remain, pvRef) == DIENUM_STOP)
|
||||
{
|
||||
IDirectInputDevice_Release(lpdid);
|
||||
return DI_OK;
|
||||
}
|
||||
IDirectInputDevice_Release(lpdid);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1861,6 +1867,7 @@ static BOOL check_hook_thread(void)
|
|||
{
|
||||
static HANDLE hook_thread;
|
||||
HMODULE module;
|
||||
HANDLE wait_handle = NULL;
|
||||
|
||||
EnterCriticalSection(&dinput_hook_crit);
|
||||
|
||||
|
@ -1884,11 +1891,17 @@ static BOOL check_hook_thread(void)
|
|||
|
||||
hook_thread_id = 0;
|
||||
PostThreadMessageW(tid, WM_USER+0x10, 0, 0);
|
||||
CloseHandle(hook_thread);
|
||||
wait_handle = hook_thread;
|
||||
hook_thread = NULL;
|
||||
}
|
||||
|
||||
LeaveCriticalSection(&dinput_hook_crit);
|
||||
|
||||
if (wait_handle)
|
||||
{
|
||||
WaitForSingleObject(wait_handle, INFINITE);
|
||||
CloseHandle(wait_handle);
|
||||
}
|
||||
return hook_thread_id != 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -126,9 +126,19 @@ static HRESULT WINAPI IDirectPlay8ServerImpl_EnumServiceProviders(IDirectPlay8Se
|
|||
PDWORD pcReturned, DWORD dwFlags)
|
||||
{
|
||||
IDirectPlay8ServerImpl *This = impl_from_IDirectPlay8Server(iface);
|
||||
FIXME("(%p)->(%s %s %p %p %p %d)\n", This, debugstr_guid(pguidServiceProvider), debugstr_guid(pguidApplication),
|
||||
TRACE("(%p)->(%s %s %p %p %p %d)\n", This, debugstr_guid(pguidServiceProvider), debugstr_guid(pguidApplication),
|
||||
pSPInfoBuffer, pcbEnumData, pcReturned, dwFlags);
|
||||
return E_NOTIMPL;
|
||||
|
||||
if(!This->msghandler)
|
||||
return DPNERR_UNINITIALIZED;
|
||||
|
||||
if(dwFlags)
|
||||
FIXME("Unhandled flags %x\n", dwFlags);
|
||||
|
||||
if(pguidApplication)
|
||||
FIXME("Application guid %s is currently being ignored\n", debugstr_guid(pguidApplication));
|
||||
|
||||
return enum_services_providers(pguidServiceProvider, pSPInfoBuffer, pcbEnumData, pcReturned);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IDirectPlay8ServerImpl_CancelAsyncOperation(IDirectPlay8Server *iface, DPNHANDLE hAsyncHandle, DWORD dwFlags)
|
||||
|
|
|
@ -184,6 +184,91 @@ static void test_server_info(void)
|
|||
}
|
||||
}
|
||||
|
||||
static void test_enum_service_providers(void)
|
||||
{
|
||||
DPN_SERVICE_PROVIDER_INFO *serv_prov_info = NULL;
|
||||
IDirectPlay8Server *server = NULL;
|
||||
DWORD items, size;
|
||||
DWORD i;
|
||||
HRESULT hr;
|
||||
|
||||
hr = CoCreateInstance( &CLSID_DirectPlay8Server, NULL, CLSCTX_ALL, &IID_IDirectPlay8Server, (LPVOID*)&server);
|
||||
ok(hr == S_OK, "Failed to create IDirectPlay8Server object\n");
|
||||
if (FAILED(hr))
|
||||
return;
|
||||
|
||||
size = 0;
|
||||
items = 0;
|
||||
hr = IDirectPlay8Server_EnumServiceProviders(server, NULL, NULL, serv_prov_info, &size, &items, 0);
|
||||
ok(hr == DPNERR_UNINITIALIZED, "got %x\n", hr);
|
||||
|
||||
hr = IDirectPlay8Server_Initialize(server, NULL, DirectPlayMessageHandler, 0);
|
||||
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
IDirectPlay8Server_Release(server);
|
||||
return;
|
||||
}
|
||||
|
||||
size = 0;
|
||||
items = 0;
|
||||
|
||||
hr = IDirectPlay8Server_EnumServiceProviders(server, NULL, NULL, NULL, &size, NULL, 0);
|
||||
ok(hr == E_POINTER, "IDirectPlay8Server_EnumServiceProviders failed with %x\n", hr);
|
||||
|
||||
hr = IDirectPlay8Server_EnumServiceProviders(server, NULL, NULL, NULL, NULL, &items, 0);
|
||||
ok(hr == E_POINTER, "IDirectPlay8Server_EnumServiceProviders failed with %x\n", hr);
|
||||
|
||||
hr = IDirectPlay8Server_EnumServiceProviders(server, NULL, NULL, NULL, &size, &items, 0);
|
||||
ok(hr == DPNERR_BUFFERTOOSMALL, "IDirectPlay8Server_EnumServiceProviders failed with %x\n", hr);
|
||||
ok(size != 0, "size is unexpectedly 0\n");
|
||||
|
||||
serv_prov_info = HeapAlloc(GetProcessHeap(), 0, size);
|
||||
|
||||
hr = IDirectPlay8Server_EnumServiceProviders(server, NULL, NULL, serv_prov_info, &size, &items, 0);
|
||||
ok(hr == S_OK, "IDirectPlay8Server_EnumServiceProviders failed with %x\n", hr);
|
||||
ok(items != 0, "Found unexpectedly no service providers\n");
|
||||
|
||||
trace("number of items found: %d\n", items);
|
||||
|
||||
for (i=0;i<items;i++)
|
||||
{
|
||||
trace("Found Service Provider: %s\n", wine_dbgstr_w(serv_prov_info[i].pwszName));
|
||||
trace("Found guid: %s\n", wine_dbgstr_guid(&serv_prov_info[i].guid));
|
||||
}
|
||||
|
||||
ok(HeapFree(GetProcessHeap(), 0, serv_prov_info), "Failed freeing server provider info\n");
|
||||
|
||||
size = 0;
|
||||
items = 0;
|
||||
|
||||
hr = IDirectPlay8Server_EnumServiceProviders(server, &CLSID_DP8SP_TCPIP, NULL, NULL, &size, &items, 0);
|
||||
ok(hr == DPNERR_BUFFERTOOSMALL, "IDirectPlay8Server_EnumServiceProviders failed with %x\n", hr);
|
||||
ok(size != 0, "size is unexpectedly 0\n");
|
||||
|
||||
serv_prov_info = HeapAlloc(GetProcessHeap(), 0, size);
|
||||
|
||||
hr = IDirectPlay8Server_EnumServiceProviders(server, &CLSID_DP8SP_TCPIP, NULL, serv_prov_info, &size, &items, 0);
|
||||
ok(hr == S_OK, "IDirectPlay8Server_EnumServiceProviders failed with %x\n", hr);
|
||||
ok(items != 0, "Found unexpectedly no adapter\n");
|
||||
|
||||
|
||||
for (i=0;i<items;i++)
|
||||
{
|
||||
trace("Found adapter: %s\n", wine_dbgstr_w(serv_prov_info[i].pwszName));
|
||||
trace("Found adapter guid: %s\n", wine_dbgstr_guid(&serv_prov_info[i].guid));
|
||||
}
|
||||
|
||||
/* Invalid GUID */
|
||||
items = 88;
|
||||
hr = IDirectPlay8Server_EnumServiceProviders(server, &appguid, NULL, serv_prov_info, &size, &items, 0);
|
||||
ok(hr == DPNERR_DOESNOTEXIST, "IDirectPlay8Peer_EnumServiceProviders failed with %x\n", hr);
|
||||
ok(items == 88, "Found adapter %d\n", items);
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, serv_prov_info);
|
||||
IDirectPlay8Server_Release(server);
|
||||
}
|
||||
|
||||
BOOL is_process_elevated(void)
|
||||
{
|
||||
HANDLE token;
|
||||
|
@ -398,6 +483,7 @@ START_TEST(server)
|
|||
|
||||
create_server();
|
||||
test_server_info();
|
||||
test_enum_service_providers();
|
||||
|
||||
CoUninitialize();
|
||||
|
||||
|
|
|
@ -296,8 +296,7 @@ static HRESULT WINAPI IDirectSoundBufferImpl_Play(IDirectSoundBuffer8 *iface, DW
|
|||
if (This->state == STATE_STOPPED) {
|
||||
This->leadin = TRUE;
|
||||
This->state = STATE_STARTING;
|
||||
} else if (This->state == STATE_STOPPING)
|
||||
This->state = STATE_PLAYING;
|
||||
}
|
||||
|
||||
for (i = 0; i < This->num_filters; i++) {
|
||||
IMediaObject_Discontinuity(This->filters[i].obj, 0);
|
||||
|
@ -317,9 +316,7 @@ static HRESULT WINAPI IDirectSoundBufferImpl_Stop(IDirectSoundBuffer8 *iface)
|
|||
|
||||
AcquireSRWLockExclusive(&This->lock);
|
||||
|
||||
if (This->state == STATE_PLAYING)
|
||||
This->state = STATE_STOPPING;
|
||||
else if (This->state == STATE_STARTING)
|
||||
if (This->state == STATE_PLAYING || This->state == STATE_STARTING)
|
||||
{
|
||||
This->state = STATE_STOPPED;
|
||||
DSOUND_CheckEvent(This, 0, 0);
|
||||
|
@ -420,6 +417,8 @@ static HRESULT WINAPI IDirectSoundBufferImpl_GetStatus(IDirectSoundBuffer8 *ifac
|
|||
if (This->playflags & DSBPLAY_LOOPING)
|
||||
*status |= DSBSTATUS_LOOPING;
|
||||
}
|
||||
if (This->dsbd.dwFlags & DSBCAPS_LOCDEFER)
|
||||
*status |= DSBSTATUS_LOCSOFTWARE;
|
||||
ReleaseSRWLockShared(&This->lock);
|
||||
|
||||
TRACE("status=%x\n", *status);
|
||||
|
|
|
@ -593,11 +593,7 @@ static void DSOUND_MixToPrimary(const DirectSoundDevice *device, float *mix_buff
|
|||
if (dsb->buflen && dsb->state) {
|
||||
TRACE("Checking %p, frames=%d\n", dsb, frames);
|
||||
AcquireSRWLockShared(&dsb->lock);
|
||||
/* if buffer is stopping it is stopped now */
|
||||
if (dsb->state == STATE_STOPPING) {
|
||||
dsb->state = STATE_STOPPED;
|
||||
DSOUND_CheckEvent(dsb, 0, 0);
|
||||
} else if (dsb->state != STATE_STOPPED) {
|
||||
if (dsb->state != STATE_STOPPED) {
|
||||
|
||||
/* if the buffer was starting, it must be playing now */
|
||||
if (dsb->state == STATE_STARTING)
|
||||
|
|
|
@ -1809,6 +1809,79 @@ static void test_effects(void)
|
|||
ok(!ref, "Got outstanding refcount %u.\n", ref);
|
||||
}
|
||||
|
||||
static void test_AcquireResources(void)
|
||||
{
|
||||
IDirectSound8 *dsound;
|
||||
IDirectSoundBuffer *primary, *secondary;
|
||||
DSBUFFERDESC bufdesc;
|
||||
WAVEFORMATEX fmt;
|
||||
HRESULT hr;
|
||||
|
||||
hr = DirectSoundCreate8(NULL, &dsound, NULL);
|
||||
ok(hr == DS_OK || hr == DSERR_NODRIVER, "Got hr %#x.\n", hr);
|
||||
if (FAILED(hr))
|
||||
return;
|
||||
|
||||
hr = IDirectSound8_SetCooperativeLevel(dsound, get_hwnd(), DSSCL_PRIORITY);
|
||||
ok(hr == DS_OK, "Got hr %#x.\n", hr);
|
||||
|
||||
bufdesc.dwSize = sizeof(bufdesc);
|
||||
bufdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_PRIMARYBUFFER;
|
||||
bufdesc.dwBufferBytes = 0;
|
||||
bufdesc.dwReserved = 0;
|
||||
bufdesc.lpwfxFormat = NULL;
|
||||
bufdesc.guid3DAlgorithm = GUID_NULL;
|
||||
|
||||
hr = IDirectSound8_CreateSoundBuffer(dsound, &bufdesc, &primary, NULL);
|
||||
ok(hr == S_OK, "CreateSoundBuffer failed: %08x\n", hr);
|
||||
if(hr != S_OK) {
|
||||
IDirectSound_Release(dsound);
|
||||
return;
|
||||
}
|
||||
|
||||
fmt.wFormatTag = WAVE_FORMAT_PCM;
|
||||
fmt.nChannels = 2;
|
||||
fmt.nSamplesPerSec = 48000;
|
||||
fmt.wBitsPerSample = 16;
|
||||
fmt.nBlockAlign = fmt.nChannels * fmt.wBitsPerSample / 8;
|
||||
fmt.nAvgBytesPerSec = fmt.nBlockAlign * fmt.nSamplesPerSec;
|
||||
fmt.cbSize = 0;
|
||||
|
||||
bufdesc.lpwfxFormat = &fmt;
|
||||
bufdesc.dwBufferBytes = fmt.nSamplesPerSec * fmt.nBlockAlign / 10;
|
||||
bufdesc.dwFlags = DSBCAPS_LOCDEFER | DSBCAPS_CTRLVOLUME;
|
||||
|
||||
/* see if we can create one more */
|
||||
hr = IDirectSound8_CreateSoundBuffer(dsound, &bufdesc, &secondary, NULL);
|
||||
ok(hr == S_OK, "CreateSoundBuffer gave wrong error: %08x\n", hr);
|
||||
if(hr == S_OK) {
|
||||
DWORD status;
|
||||
IDirectSoundBuffer8 *buffer8;
|
||||
|
||||
hr = IDirectSoundBuffer_QueryInterface(secondary, &IID_IDirectSoundBuffer8, (void **)&buffer8);
|
||||
ok(hr == S_OK, "got: %08x\n", hr);
|
||||
|
||||
status = 0xFFFF;
|
||||
hr = IDirectSoundBuffer8_GetStatus(buffer8, &status);
|
||||
ok(hr == S_OK, "got: %08x\n", hr);
|
||||
todo_wine ok(status == 0, "got: %08x\n", status);
|
||||
|
||||
hr = IDirectSoundBuffer8_AcquireResources(buffer8, 0, 0, NULL);
|
||||
ok(hr == S_OK, "got: %08x\n", hr);
|
||||
|
||||
status = 0xFFFF;
|
||||
hr = IDirectSoundBuffer8_GetStatus(buffer8, &status);
|
||||
ok(hr == S_OK, "got: %08x\n", hr);
|
||||
ok(status == DSBSTATUS_LOCSOFTWARE, "got: %08x\n", status);
|
||||
|
||||
IDirectSoundBuffer8_Release(buffer8);
|
||||
IDirectSoundBuffer_Release(secondary);
|
||||
}
|
||||
|
||||
IDirectSoundBuffer_Release(primary);
|
||||
IDirectSound_Release(dsound);
|
||||
}
|
||||
|
||||
START_TEST(dsound8)
|
||||
{
|
||||
DWORD cookie;
|
||||
|
@ -1822,6 +1895,7 @@ START_TEST(dsound8)
|
|||
test_hw_buffers();
|
||||
test_first_device();
|
||||
test_primary_flags();
|
||||
test_AcquireResources();
|
||||
|
||||
hr = CoRegisterClassObject(&testdmo_clsid, (IUnknown *)&testdmo_cf,
|
||||
CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &cookie);
|
||||
|
|
|
@ -286,7 +286,8 @@ BOOL WINAPI CPAcquireContext( HCRYPTPROV *ret_prov, LPSTR container, DWORD flags
|
|||
{
|
||||
case 0:
|
||||
case 0 | CRYPT_MACHINE_KEYSET:
|
||||
ret = read_key_container( name, flags );
|
||||
if (!(ret = read_key_container( name, flags )))
|
||||
SetLastError( NTE_BAD_KEYSET );
|
||||
break;
|
||||
|
||||
case CRYPT_NEWKEYSET:
|
||||
|
@ -941,7 +942,7 @@ BOOL WINAPI CPGetHashParam( HCRYPTPROV hprov, HCRYPTHASH hhash, DWORD param, BYT
|
|||
SetLastError( ERROR_MORE_DATA );
|
||||
return FALSE;
|
||||
}
|
||||
memcpy( data, hash->value, hash->len );
|
||||
if (data) memcpy( data, hash->value, hash->len );
|
||||
*len = hash->len;
|
||||
return TRUE;
|
||||
|
||||
|
|
|
@ -71,6 +71,19 @@ static void test_acquire_context(void)
|
|||
|
||||
/* test base DSS provider (PROV_DSS) */
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
result = CryptAcquireContextA(&hProv, NULL, NULL, PROV_DSS, 0);
|
||||
if (!result)
|
||||
{
|
||||
ok(GetLastError() == NTE_BAD_KEYSET, "Expected NTE_BAD_KEYSET, got %08x\n", GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
result = CryptAcquireContextA(&hProv, NULL, NULL, PROV_DSS, CRYPT_NEWKEYSET);
|
||||
}
|
||||
ok(result, "CryptAcquireContextA succeeded\n");
|
||||
|
||||
result = CryptReleaseContext(hProv, 0);
|
||||
ok(result, "CryptReleaseContext failed.\n");
|
||||
|
||||
result = CryptAcquireContextA(
|
||||
&hProv, NULL, MS_DEF_DSS_PROV_A, PROV_DSS, CRYPT_VERIFYCONTEXT);
|
||||
if(!result)
|
||||
|
@ -459,9 +472,16 @@ static void test_hash(const struct hash_test *tests, int testLen)
|
|||
ok(result && (hashLen == tests[i].hashLen), "Expected %d hash len, got %d.Error: %x\n",
|
||||
tests[i].hashLen, hashLen, GetLastError());
|
||||
|
||||
dataLen = 0xdeadbeef;
|
||||
result = CryptGetHashParam(hHash, HP_HASHVAL, 0, &dataLen, 0);
|
||||
ok(result, "Expected hash value return.\n");
|
||||
ok(dataLen == hashLen, "Expected hash length to match.\n");
|
||||
|
||||
hashLen = 0xdeadbeef;
|
||||
result = CryptGetHashParam(hHash, HP_HASHVAL, hashValue, &hashLen, 0);
|
||||
ok(result, "Expected hash value return.\n");
|
||||
|
||||
ok(dataLen == hashLen, "Expected hash length to match.\n");
|
||||
ok(!memcmp(hashValue, tests[i].hash, tests[i].hashLen), "Incorrect hash output.\n");
|
||||
|
||||
result = CryptHashData(hHash, data, dataLen, 0);
|
||||
|
|
|
@ -336,6 +336,12 @@ HRESULT shape_get_typographic_features(struct scriptshaping_context *context, co
|
|||
shape_get_script_lang_index(context, scripts, MS_GPOS_TAG, &script_index, &language_index);
|
||||
opentype_get_typographic_features(&context->cache->gpos, script_index, language_index, &t);
|
||||
|
||||
if (t.count == 0)
|
||||
{
|
||||
*actual_tagcount = 0;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
/* Sort and remove duplicates. */
|
||||
qsort(t.tags, t.count, sizeof(*t.tags), tag_array_sorting_compare);
|
||||
|
||||
|
|
|
@ -182,6 +182,7 @@ struct d3d11_swapchain
|
|||
IDXGIFactory *factory;
|
||||
|
||||
IDXGIOutput *target;
|
||||
LONG present_count;
|
||||
};
|
||||
|
||||
HRESULT d3d11_swapchain_init(struct d3d11_swapchain *swapchain, struct dxgi_device *device,
|
||||
|
|
|
@ -328,6 +328,8 @@ static HRESULT STDMETHODCALLTYPE d3d11_swapchain_GetDevice(IDXGISwapChain1 *ifac
|
|||
static HRESULT d3d11_swapchain_present(struct d3d11_swapchain *swapchain,
|
||||
unsigned int sync_interval, unsigned int flags)
|
||||
{
|
||||
HRESULT hr;
|
||||
|
||||
if (sync_interval > 4)
|
||||
{
|
||||
WARN("Invalid sync interval %u.\n", sync_interval);
|
||||
|
@ -345,7 +347,9 @@ static HRESULT d3d11_swapchain_present(struct d3d11_swapchain *swapchain,
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
return wined3d_swapchain_present(swapchain->wined3d_swapchain, NULL, NULL, NULL, sync_interval, 0);
|
||||
if (SUCCEEDED(hr = wined3d_swapchain_present(swapchain->wined3d_swapchain, NULL, NULL, NULL, sync_interval, 0)))
|
||||
InterlockedIncrement(&swapchain->present_count);
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT STDMETHODCALLTYPE DECLSPEC_HOTPATCH d3d11_swapchain_Present(IDXGISwapChain1 *iface, UINT sync_interval, UINT flags)
|
||||
|
@ -599,9 +603,13 @@ static HRESULT STDMETHODCALLTYPE d3d11_swapchain_GetFrameStatistics(IDXGISwapCha
|
|||
static HRESULT STDMETHODCALLTYPE d3d11_swapchain_GetLastPresentCount(IDXGISwapChain1 *iface,
|
||||
UINT *last_present_count)
|
||||
{
|
||||
FIXME("iface %p, last_present_count %p stub!\n", iface, last_present_count);
|
||||
struct d3d11_swapchain *swapchain = d3d11_swapchain_from_IDXGISwapChain1(iface);
|
||||
|
||||
return E_NOTIMPL;
|
||||
TRACE("iface %p, last_present_count %p.\n", iface, last_present_count);
|
||||
|
||||
*last_present_count = swapchain->present_count;
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
/* IDXGISwapChain1 methods */
|
||||
|
|
|
@ -908,6 +908,38 @@ static IDXGIAdapter *get_adapter_(unsigned int line, IUnknown *device, BOOL is_d
|
|||
return adapter;
|
||||
}
|
||||
|
||||
#define create_swapchain(a, b, c) create_swapchain_(__LINE__, a, b, c)
|
||||
static IDXGISwapChain *create_swapchain_(unsigned int line, IUnknown *device, BOOL is_d3d12, HWND window)
|
||||
{
|
||||
DXGI_SWAP_CHAIN_DESC desc;
|
||||
IDXGISwapChain *swapchain;
|
||||
IDXGIFactory *factory;
|
||||
HRESULT hr;
|
||||
|
||||
desc.BufferDesc.Width = 640;
|
||||
desc.BufferDesc.Height = 480;
|
||||
desc.BufferDesc.RefreshRate.Numerator = 60;
|
||||
desc.BufferDesc.RefreshRate.Denominator = 1;
|
||||
desc.BufferDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
|
||||
desc.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
|
||||
desc.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
|
||||
desc.SampleDesc.Count = 1;
|
||||
desc.SampleDesc.Quality = 0;
|
||||
desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
|
||||
desc.BufferCount = is_d3d12 ? 2 : 1;
|
||||
desc.OutputWindow = window;
|
||||
desc.Windowed = TRUE;
|
||||
desc.SwapEffect = is_d3d12 ? DXGI_SWAP_EFFECT_FLIP_DISCARD : DXGI_SWAP_EFFECT_DISCARD;
|
||||
desc.Flags = 0;
|
||||
|
||||
get_factory(device, is_d3d12, &factory);
|
||||
hr = IDXGIFactory_CreateSwapChain(factory, device, &desc, &swapchain);
|
||||
ok_(__FILE__, line)(hr == S_OK, "Failed to create swapchain, hr %#x.\n", hr);
|
||||
IDXGIFactory_Release(factory);
|
||||
|
||||
return swapchain;
|
||||
}
|
||||
|
||||
static void test_adapter_desc(void)
|
||||
{
|
||||
DXGI_ADAPTER_DESC1 desc1;
|
||||
|
@ -7324,6 +7356,65 @@ done:
|
|||
heap_free(original_modes);
|
||||
}
|
||||
|
||||
static void test_swapchain_present_count(IUnknown *device, BOOL is_d3d12)
|
||||
{
|
||||
UINT present_count, expected;
|
||||
IDXGISwapChain *swapchain;
|
||||
HWND window;
|
||||
HRESULT hr;
|
||||
|
||||
window = create_window();
|
||||
swapchain = create_swapchain(device, is_d3d12, window);
|
||||
|
||||
present_count = ~0u;
|
||||
hr = IDXGISwapChain_GetLastPresentCount(swapchain, &present_count);
|
||||
todo_wine_if(is_d3d12) ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
|
||||
todo_wine_if(is_d3d12) ok(!present_count, "Got unexpected present count %u.\n", present_count);
|
||||
|
||||
hr = IDXGISwapChain_Present(swapchain, 0, 0);
|
||||
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
|
||||
expected = present_count + 1;
|
||||
hr = IDXGISwapChain_GetLastPresentCount(swapchain, &present_count);
|
||||
todo_wine_if(is_d3d12) ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
|
||||
todo_wine_if(is_d3d12)
|
||||
ok(present_count == expected, "Got unexpected present count %u, expected %u.\n", present_count, expected);
|
||||
|
||||
hr = IDXGISwapChain_Present(swapchain, 10, 0);
|
||||
ok(hr == DXGI_ERROR_INVALID_CALL, "Got unexpected hr %#x.\n", hr);
|
||||
expected = present_count;
|
||||
hr = IDXGISwapChain_GetLastPresentCount(swapchain, &present_count);
|
||||
todo_wine_if(is_d3d12) ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
|
||||
ok(present_count == expected, "Got unexpected present count %u, expected %u.\n", present_count, expected);
|
||||
|
||||
hr = IDXGISwapChain_Present(swapchain, 0, DXGI_PRESENT_TEST);
|
||||
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
|
||||
expected = present_count;
|
||||
hr = IDXGISwapChain_GetLastPresentCount(swapchain, &present_count);
|
||||
todo_wine_if(is_d3d12) ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
|
||||
ok(present_count == expected, "Got unexpected present count %u, expected %u.\n", present_count, expected);
|
||||
|
||||
ShowWindow(window, SW_MINIMIZE);
|
||||
hr = IDXGISwapChain_Present(swapchain, 0, 0);
|
||||
ok(hr == (is_d3d12 ? S_OK : DXGI_STATUS_OCCLUDED), "Got unexpected hr %#x.\n", hr);
|
||||
expected = present_count + !!is_d3d12;
|
||||
hr = IDXGISwapChain_GetLastPresentCount(swapchain, &present_count);
|
||||
todo_wine_if(is_d3d12) ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
|
||||
todo_wine_if(is_d3d12)
|
||||
ok(present_count == expected, "Got unexpected present count %u, expected %u.\n", present_count, expected);
|
||||
|
||||
ShowWindow(window, SW_NORMAL);
|
||||
hr = IDXGISwapChain_Present(swapchain, 0, 0);
|
||||
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
|
||||
expected = present_count + 1;
|
||||
hr = IDXGISwapChain_GetLastPresentCount(swapchain, &present_count);
|
||||
todo_wine_if(is_d3d12) ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
|
||||
todo_wine_if(is_d3d12)
|
||||
ok(present_count == expected, "Got unexpected present count %u, expected %u.\n", present_count, expected);
|
||||
|
||||
IDXGISwapChain_Release(swapchain);
|
||||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
static void run_on_d3d10(void (*test_func)(IUnknown *device, BOOL is_d3d12))
|
||||
{
|
||||
IDXGIDevice *device;
|
||||
|
@ -7441,6 +7532,7 @@ START_TEST(dxgi)
|
|||
run_on_d3d10(test_window_association);
|
||||
run_on_d3d10(test_default_fullscreen_target_output);
|
||||
run_on_d3d10(test_mode_change);
|
||||
run_on_d3d10(test_swapchain_present_count);
|
||||
|
||||
if (!(d3d12_module = LoadLibraryA("d3d12.dll")))
|
||||
{
|
||||
|
@ -7471,6 +7563,7 @@ START_TEST(dxgi)
|
|||
run_on_d3d12(test_window_association);
|
||||
run_on_d3d12(test_default_fullscreen_target_output);
|
||||
run_on_d3d12(test_mode_change);
|
||||
run_on_d3d12(test_swapchain_present_count);
|
||||
|
||||
FreeLibrary(d3d12_module);
|
||||
}
|
||||
|
|
|
@ -678,7 +678,7 @@ static LRESULT on_nm_click(NSTC2Impl *This, NMHDR *nmhdr)
|
|||
{
|
||||
TVHITTESTINFO tvhit;
|
||||
IShellItem *psi;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("%p (%p)\n", This, nmhdr);
|
||||
|
||||
GetCursorPos(&tvhit.pt);
|
||||
|
@ -690,17 +690,7 @@ static LRESULT on_nm_click(NSTC2Impl *This, NMHDR *nmhdr)
|
|||
|
||||
/* TVHT_ maps onto the corresponding NSTCEHT_ */
|
||||
psi = shellitem_from_treeitem(This, tvhit.hItem);
|
||||
hr = events_OnItemClick(This, psi, tvhit.flags, NSTCECT_LBUTTON);
|
||||
|
||||
/* The expando should not be expanded unless
|
||||
* double-clicked. */
|
||||
if(tvhit.flags == TVHT_ONITEMBUTTON)
|
||||
return TRUE;
|
||||
|
||||
if(SUCCEEDED(hr))
|
||||
return FALSE;
|
||||
else
|
||||
return TRUE;
|
||||
return FAILED(events_OnItemClick(This, psi, tvhit.flags, NSTCECT_LBUTTON));
|
||||
}
|
||||
|
||||
static LRESULT on_wm_mbuttonup(NSTC2Impl *This, WPARAM wParam, LPARAM lParam)
|
||||
|
|
|
@ -913,7 +913,7 @@ static BOOL insert_face_in_family_list( struct gdi_font_face *face, struct gdi_f
|
|||
debugstr_w(face->full_name), debugstr_w(family->family_name),
|
||||
cursor->version, face->version );
|
||||
|
||||
if (face->file && !wcsicmp( face->file, cursor->file ))
|
||||
if (face->file && cursor->file && !wcsicmp( face->file, cursor->file ))
|
||||
{
|
||||
cursor->refcount++;
|
||||
TRACE("Font %s already in list, refcount now %d\n",
|
||||
|
@ -2485,7 +2485,8 @@ static void update_codepage(void)
|
|||
add_font_list(hkey, &nls_update_font_list[i], screen_dpi);
|
||||
RegCloseKey(hkey);
|
||||
}
|
||||
if (!RegCreateKeyW( HKEY_LOCAL_MACHINE,
|
||||
/* Only update these if the Codepage changed. */
|
||||
if (strcmp( buf, cpbuf ) && !RegCreateKeyW( HKEY_LOCAL_MACHINE,
|
||||
L"Software\\Microsoft\\Windows NT\\CurrentVersion\\FontSubstitutes", &hkey ))
|
||||
{
|
||||
RegSetValueExA(hkey, "MS Shell Dlg", 0, REG_SZ, (const BYTE *)nls_update_font_list[i].shelldlg,
|
||||
|
@ -2685,7 +2686,9 @@ static UINT get_font_type( const NEWTEXTMETRICEXW *ntm )
|
|||
static BOOL get_face_enum_data( struct gdi_font_face *face, ENUMLOGFONTEXW *elf, NEWTEXTMETRICEXW *ntm )
|
||||
{
|
||||
struct gdi_font *font;
|
||||
LOGFONTW lf = { .lfHeight = 100 };
|
||||
LOGFONTW lf = { .lfHeight = -4096 /* preferable EM Square size */ };
|
||||
|
||||
if (!face->scalable) lf.lfHeight = 0;
|
||||
|
||||
if (!(font = create_gdi_font( face, NULL, &lf ))) return FALSE;
|
||||
|
||||
|
@ -2695,12 +2698,42 @@ static BOOL get_face_enum_data( struct gdi_font_face *face, ENUMLOGFONTEXW *elf,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
if (font->scalable && -lf.lfHeight % font->otm.otmEMSquare != 0)
|
||||
{
|
||||
/* reload with the original EM Square size */
|
||||
lf.lfHeight = -font->otm.otmEMSquare;
|
||||
free_gdi_font( font );
|
||||
|
||||
if (!(font = create_gdi_font( face, NULL, &lf ))) return FALSE;
|
||||
if (!font_funcs->load_font( font ))
|
||||
{
|
||||
free_gdi_font( font );
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if (font_funcs->set_outline_text_metrics( font ))
|
||||
{
|
||||
memcpy( &ntm->ntmTm, &font->otm.otmTextMetrics, sizeof(TEXTMETRICW) );
|
||||
static const DWORD ntm_ppem = 32;
|
||||
|
||||
#define TM font->otm.otmTextMetrics
|
||||
#define SCALE_NTM(value) (MulDiv( ntm->ntmTm.tmHeight, (value), TM.tmHeight ))
|
||||
ntm->ntmTm.tmHeight = MulDiv( ntm_ppem, font->ntmCellHeight, font->otm.otmEMSquare );
|
||||
ntm->ntmTm.tmAscent = SCALE_NTM( TM.tmAscent );
|
||||
ntm->ntmTm.tmDescent = ntm->ntmTm.tmHeight - ntm->ntmTm.tmAscent;
|
||||
ntm->ntmTm.tmInternalLeading = SCALE_NTM( TM.tmInternalLeading );
|
||||
ntm->ntmTm.tmExternalLeading = SCALE_NTM( TM.tmExternalLeading );
|
||||
ntm->ntmTm.tmAveCharWidth = SCALE_NTM( TM.tmAveCharWidth );
|
||||
ntm->ntmTm.tmMaxCharWidth = SCALE_NTM( TM.tmMaxCharWidth );
|
||||
|
||||
memcpy((char *)&ntm->ntmTm + offsetof( TEXTMETRICW, tmWeight ),
|
||||
(const char *)&TM + offsetof( TEXTMETRICW, tmWeight ),
|
||||
sizeof(TEXTMETRICW) - offsetof( TEXTMETRICW, tmWeight ));
|
||||
ntm->ntmTm.ntmSizeEM = font->otm.otmEMSquare;
|
||||
ntm->ntmTm.ntmCellHeight = font->ntmCellHeight;
|
||||
ntm->ntmTm.ntmAvgWidth = font->ntmAvgWidth;
|
||||
#undef SCALE_NTM
|
||||
#undef TM
|
||||
}
|
||||
else if (font_funcs->set_bitmap_text_metrics( font ))
|
||||
{
|
||||
|
@ -2784,7 +2817,7 @@ static BOOL enum_face_charsets( const struct gdi_font_family *family, struct gdi
|
|||
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
if (!face->scalable && face->fs.fsCsb[0] == 0) /* OEM bitmap */
|
||||
if (face->fs.fsCsb[0] == 0) /* OEM */
|
||||
{
|
||||
elf.elfLogFont.lfCharSet = ntm.ntmTm.tmCharSet = OEM_CHARSET;
|
||||
load_script_name( IDS_OEM_DOS - IDS_FIRST_SCRIPT, elf.elfScript );
|
||||
|
|
|
@ -1243,7 +1243,7 @@ static struct unix_face *unix_face_create( const char *unix_name, void *data_ptr
|
|||
This->style_name = decode_opentype_name( &style_name.face_name );
|
||||
|
||||
memset( &full_name, 0, sizeof(full_name) );
|
||||
style_name.primary_langid = primary_langid;
|
||||
full_name.primary_langid = primary_langid;
|
||||
opentype_enum_full_names( tt_name_v0, search_face_name_callback, &full_name );
|
||||
This->full_name = decode_opentype_name( &full_name.face_name );
|
||||
|
||||
|
@ -1538,9 +1538,10 @@ static UINT parse_aa_pattern( FcPattern *pattern )
|
|||
|
||||
static FcPattern *create_family_pattern( const char *name, FcPattern **cached )
|
||||
{
|
||||
FcPattern *ret = NULL, *tmp, *pattern = pFcPatternCreate();
|
||||
FcPattern *ret = NULL, *tmp, *pattern;
|
||||
FcResult result;
|
||||
if (*cached) return *cached;
|
||||
pattern = pFcPatternCreate();
|
||||
pFcPatternAddString( pattern, FC_FAMILY, (const FcChar8 *)name );
|
||||
pFcPatternAddString( pattern, FC_NAMELANG, (const FcChar8 *)"en-us" );
|
||||
pFcPatternAddString( pattern, FC_PRGNAME, (const FcChar8 *)"wine" );
|
||||
|
@ -2489,6 +2490,7 @@ static BOOL CDECL freetype_load_font( struct gdi_font *font )
|
|||
TRACE( "height %d => ppem %d\n", font->lf.lfHeight, font->ppem );
|
||||
height = font->ppem;
|
||||
font->ttc_item_offset = get_ttc_offset( ft_face, font->face_index );
|
||||
font->otm.otmEMSquare = ft_face->units_per_EM;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -3952,7 +3954,6 @@ static BOOL CDECL freetype_set_outline_text_metrics( struct gdi_font *font )
|
|||
font->otm.otmsCharSlopeRise = pHori->caret_Slope_Rise;
|
||||
font->otm.otmsCharSlopeRun = pHori->caret_Slope_Run;
|
||||
font->otm.otmItalicAngle = 0; /* POST table */
|
||||
font->otm.otmEMSquare = ft_face->units_per_EM;
|
||||
font->otm.otmAscent = SCALE_Y(pOS2->sTypoAscender);
|
||||
font->otm.otmDescent = SCALE_Y(pOS2->sTypoDescender);
|
||||
font->otm.otmLineGap = SCALE_Y(pOS2->sTypoLineGap);
|
||||
|
|
|
@ -3927,6 +3927,25 @@ static void test_text_metrics(const LOGFONTA *lf, const NEWTEXTMETRICA *ntm)
|
|||
ok(ntm->ntmCellHeight == cell_height, "%s: ntmCellHeight %u != %u, os2.usWinAscent/os2.usWinDescent %u/%u\n",
|
||||
font_name, ntm->ntmCellHeight, cell_height, ascent, descent);
|
||||
|
||||
/* NEWTEXTMETRIC's scaling method is different from TEXTMETRIC's */
|
||||
#define SCALE_NTM(value) (MulDiv(ntm->tmHeight, (value), cell_height))
|
||||
size = MulDiv(32, ntm->ntmCellHeight, ntm->ntmSizeEM);
|
||||
ok(ntm->tmHeight == size, "%s: ntm->tmHeight %d != %d (%u/%u)\n",
|
||||
font_name, ntm->tmHeight, size, ntm->ntmCellHeight, ntm->ntmSizeEM);
|
||||
size = SCALE_NTM(ntm->ntmAvgWidth);
|
||||
ok(ntm->tmAveCharWidth == size, "%s: ntm->tmAveCharWidth %d != %d (%u/%u,%d)\n",
|
||||
font_name, ntm->tmAveCharWidth, size, ntm->ntmAvgWidth, cell_height, ntm->tmHeight);
|
||||
size = SCALE_NTM(ascent);
|
||||
ok(ntm->tmAscent == size, "%s: ntm->tmAscent %d != %d (%u/%u,%d)\n",
|
||||
font_name, ntm->tmAscent, size, ascent, cell_height, ntm->tmHeight);
|
||||
size = ntm->tmHeight - ntm->tmAscent;
|
||||
ok(ntm->tmDescent == size, "%s: ntm->tmDescent %d != %d (%u/%u,%d)\n",
|
||||
font_name, ntm->tmDescent, size, descent, cell_height, ntm->tmHeight);
|
||||
size = SCALE_NTM(cell_height - ntm->ntmSizeEM);
|
||||
ok(ntm->tmInternalLeading == size, "%s: ntm->tmInternalLeading %d != %d (%u/%u,%d)\n",
|
||||
font_name, ntm->tmInternalLeading, size, cell_height - ntm->ntmSizeEM, cell_height, ntm->tmHeight);
|
||||
#undef SCALE_NTM
|
||||
|
||||
version = GET_BE_WORD(tt_os2.version);
|
||||
|
||||
os2_first_char = GET_BE_WORD(tt_os2.usFirstCharIndex);
|
||||
|
|
Binary file not shown.
|
@ -1,4 +1,4 @@
|
|||
SplineFontDB: 3.2
|
||||
SplineFontDB: 3.0
|
||||
FontName: WineLangNamesRegular
|
||||
FullName: Wine_Lang_Names_Regular
|
||||
FamilyName: Wine_Lang_Names
|
||||
|
|
Binary file not shown.
|
@ -1,4 +1,4 @@
|
|||
SplineFontDB: 3.2
|
||||
SplineFontDB: 3.0
|
||||
FontName: WineLangNamesRegular
|
||||
FullName: Wine_Lang_Names_Regular
|
||||
FamilyName: Wine_Lang_Names
|
||||
|
|
Binary file not shown.
|
@ -1,4 +1,4 @@
|
|||
SplineFontDB: 3.2
|
||||
SplineFontDB: 3.0
|
||||
FontName: WineLangNamesRegular
|
||||
FullName: Wine_Lang_Names_Regular
|
||||
FamilyName: Wine_Lang_Names
|
||||
|
|
Binary file not shown.
|
@ -1,4 +1,4 @@
|
|||
SplineFontDB: 3.2
|
||||
SplineFontDB: 3.0
|
||||
FontName: wine_nul
|
||||
FullName: wine_nul
|
||||
FamilyName: wine_nul
|
||||
|
|
Binary file not shown.
|
@ -1,4 +1,4 @@
|
|||
SplineFontDB: 3.2
|
||||
SplineFontDB: 3.0
|
||||
FontName: Wine_TTF_Names_Long_Family1_Cond_Regular
|
||||
FamilyName: Wine_TTF_Names_Long_Family1_Cond
|
||||
Weight: Regular
|
||||
|
|
Binary file not shown.
|
@ -1,4 +1,4 @@
|
|||
SplineFontDB: 3.2
|
||||
SplineFontDB: 3.0
|
||||
FontName: Wine_TTF_Names_Long_Family1_Cond_Regular
|
||||
FamilyName: Wine_TTF_Names_Long_Family1_Cond
|
||||
Weight: Regular
|
||||
|
|
Binary file not shown.
|
@ -190,7 +190,7 @@ GpStatus WINGDIPAPI GdipCreateFont(GDIPCONST GpFontFamily *fontFamily,
|
|||
(*font)->unit = unit;
|
||||
(*font)->emSize = emSize;
|
||||
(*font)->otm = otm;
|
||||
(*font)->family = (GpFontFamily *)fontFamily;
|
||||
GdipCloneFontFamily((GpFontFamily*)fontFamily, &(*font)->family);
|
||||
|
||||
TRACE("<-- %p\n", *font);
|
||||
|
||||
|
@ -323,8 +323,7 @@ GpStatus WINGDIPAPI GdipGetFamily(GpFont *font, GpFontFamily **family)
|
|||
if (!(font && family))
|
||||
return InvalidParameter;
|
||||
|
||||
*family = font->family;
|
||||
return Ok;
|
||||
return GdipCloneFontFamily(font->family, family);
|
||||
}
|
||||
|
||||
static REAL get_font_size(const GpFont *font)
|
||||
|
@ -746,9 +745,8 @@ GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR *name,
|
|||
{
|
||||
if (!wcsicmp(lf.lfFaceName, collection->FontFamilies[i]->FamilyName))
|
||||
{
|
||||
*family = collection->FontFamilies[i];
|
||||
status = GdipCloneFontFamily(collection->FontFamilies[i], family);
|
||||
TRACE("<-- %p\n", *family);
|
||||
status = Ok;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -778,6 +776,10 @@ GpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily *family, GpFontFamily **clo
|
|||
TRACE("%p (%s), %p\n", family, debugstr_w(family->FamilyName), clone);
|
||||
|
||||
*clone = family;
|
||||
|
||||
if (!family->installed)
|
||||
InterlockedIncrement(&family->ref);
|
||||
|
||||
return Ok;
|
||||
}
|
||||
|
||||
|
@ -796,17 +798,20 @@ GpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily *family, GpFontFamily **clo
|
|||
* FAILURE: InvalidParameter if family is NULL
|
||||
*
|
||||
* NOTES
|
||||
* If name is a NULL ptr, then both XP and Vista will crash (so we do as well)
|
||||
* If name is NULL, XP and Vista crash but not Windows 7+
|
||||
*/
|
||||
GpStatus WINGDIPAPI GdipGetFamilyName (GDIPCONST GpFontFamily *family,
|
||||
WCHAR *name, LANGID language)
|
||||
{
|
||||
static int lang_fixme;
|
||||
|
||||
TRACE("%p, %p, %d\n", family, name, language);
|
||||
|
||||
if (family == NULL)
|
||||
return InvalidParameter;
|
||||
|
||||
TRACE("%p, %p, %d\n", family, name, language);
|
||||
if (name == NULL)
|
||||
return Ok;
|
||||
|
||||
if (language != LANG_NEUTRAL && !lang_fixme++)
|
||||
FIXME("No support for handling of multiple languages!\n");
|
||||
|
@ -835,6 +840,11 @@ GpStatus WINGDIPAPI GdipDeleteFontFamily(GpFontFamily *FontFamily)
|
|||
if (!FontFamily)
|
||||
return InvalidParameter;
|
||||
|
||||
if (!FontFamily->installed && !InterlockedDecrement(&FontFamily->ref))
|
||||
{
|
||||
heap_free(FontFamily);
|
||||
}
|
||||
|
||||
return Ok;
|
||||
}
|
||||
|
||||
|
@ -1079,7 +1089,7 @@ GpStatus WINGDIPAPI GdipDeletePrivateFontCollection(GpFontCollection **fontColle
|
|||
if (!fontCollection)
|
||||
return InvalidParameter;
|
||||
|
||||
for (i = 0; i < (*fontCollection)->count; i++) heap_free((*fontCollection)->FontFamilies[i]);
|
||||
for (i = 0; i < (*fontCollection)->count; i++) GdipDeleteFontFamily((*fontCollection)->FontFamilies[i]);
|
||||
heap_free((*fontCollection)->FontFamilies);
|
||||
heap_free(*fontCollection);
|
||||
|
||||
|
@ -1541,6 +1551,7 @@ GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList(
|
|||
|
||||
for (i = 0; i < numSought && i < fontCollection->count; i++)
|
||||
{
|
||||
/* caller is responsible for cloning these if it keeps references */
|
||||
gpfamilies[i] = fontCollection->FontFamilies[i];
|
||||
}
|
||||
|
||||
|
@ -1641,6 +1652,8 @@ static INT CALLBACK add_font_proc(const LOGFONTW *lfw, const TEXTMETRICW *ntm,
|
|||
family->descent = fm.descent;
|
||||
family->line_spacing = fm.line_spacing;
|
||||
family->dpi = fm.dpi;
|
||||
family->installed = param->is_system;
|
||||
family->ref = 1;
|
||||
|
||||
lstrcpyW(family->FamilyName, lfw->lfFaceName);
|
||||
|
||||
|
|
|
@ -528,6 +528,8 @@ struct GpFontFamily{
|
|||
WCHAR FamilyName[LF_FACESIZE];
|
||||
UINT16 em_height, ascent, descent, line_spacing; /* in font units */
|
||||
int dpi;
|
||||
BOOL installed;
|
||||
LONG ref;
|
||||
};
|
||||
|
||||
/* internal use */
|
||||
|
|
|
@ -5225,9 +5225,6 @@ GpStatus gdip_format_string(HDC hdc,
|
|||
hotkeyprefix_count = 0;
|
||||
|
||||
for(i = 0, j = 0; i < length; i++){
|
||||
/* FIXME: This makes the indexes passed to callback inaccurate. */
|
||||
if(!iswprint(string[i]) && (string[i] != '\n'))
|
||||
continue;
|
||||
|
||||
/* FIXME: tabs should be handled using tabstops from stringformat */
|
||||
if (string[i] == '\t')
|
||||
|
|
|
@ -72,7 +72,7 @@ static void test_long_name(void)
|
|||
GpStatus stat;
|
||||
GpFontCollection *fonts;
|
||||
INT num_families;
|
||||
GpFontFamily *family;
|
||||
GpFontFamily *family, *cloned_family;
|
||||
WCHAR family_name[LF_FACESIZE];
|
||||
GpFont *font;
|
||||
|
||||
|
@ -98,6 +98,10 @@ static void test_long_name(void)
|
|||
stat = GdipCreateFont(family, 256.0, FontStyleRegular, UnitPixel, &font);
|
||||
ok(stat == Ok, "GdipCreateFont failed: %d\n", stat);
|
||||
|
||||
stat = GdipCloneFontFamily(family, &cloned_family);
|
||||
ok(stat == Ok, "GdipCloneFontFamily failed: %d\n", stat);
|
||||
ok(family == cloned_family, "GdipCloneFontFamily returned new object\n");
|
||||
|
||||
/* Cleanup */
|
||||
|
||||
stat = GdipDeleteFont(font);
|
||||
|
@ -106,6 +110,13 @@ static void test_long_name(void)
|
|||
stat = GdipDeletePrivateFontCollection(&fonts);
|
||||
ok(stat == Ok, "GdipDeletePrivateFontCollection failed: %d\n", stat);
|
||||
|
||||
/* Cloned family survives after collection is deleted */
|
||||
stat = GdipGetFamilyName(cloned_family, family_name, LANG_NEUTRAL);
|
||||
ok(stat == Ok, "GdipGetFamilyName failed: %d\n", stat);
|
||||
|
||||
stat = GdipDeleteFontFamily(cloned_family);
|
||||
ok(stat == Ok, "GdipDeleteFontFamily failed: %d\n", stat);
|
||||
|
||||
DELETE_FONTFILE(path);
|
||||
}
|
||||
|
||||
|
@ -377,12 +388,9 @@ static void test_fontfamily (void)
|
|||
expect (Ok, stat);
|
||||
expect (0, lstrcmpiW(itsName, L"Tahoma"));
|
||||
|
||||
if (0)
|
||||
{
|
||||
/* Crashes on Windows XP SP2, Vista, and so Wine as well */
|
||||
stat = GdipGetFamilyName (family, NULL, LANG_NEUTRAL);
|
||||
expect (Ok, stat);
|
||||
}
|
||||
/* Crashes on Windows XP SP2 and Vista */
|
||||
stat = GdipGetFamilyName (family, NULL, LANG_NEUTRAL);
|
||||
expect (Ok, stat);
|
||||
|
||||
/* Make sure we don't read old data */
|
||||
ZeroMemory (itsName, sizeof(itsName));
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
SplineFontDB: 3.2
|
||||
SplineFontDB: 3.0
|
||||
FontName: winegdiptestfont0
|
||||
FullName: Wine GDI+ Test Font 0
|
||||
FamilyName: winegdiptestfont
|
||||
|
|
Binary file not shown.
|
@ -1898,14 +1898,14 @@ WCHAR *decode_html(const char *html_fragment, int html_fragment_len, UINT code_p
|
|||
while(1)
|
||||
{
|
||||
symbol = 0;
|
||||
amp = strchr(h, '&');
|
||||
amp = memchr(h, '&', html_fragment + html_fragment_len - h);
|
||||
if(!amp) break;
|
||||
len = amp-h;
|
||||
/* Copy the characters prior to the HTML encoded character */
|
||||
memcpy(&tmp[tmp_len], h, len);
|
||||
tmp_len += len;
|
||||
amp++; /* skip ampersand */
|
||||
sem = strchr(amp, ';');
|
||||
sem = memchr(amp, ';', html_fragment + html_fragment_len - amp);
|
||||
/* Require a semicolon after the ampersand */
|
||||
if(!sem)
|
||||
{
|
||||
|
|
|
@ -254,6 +254,19 @@ static void _test_LocationURL(unsigned line, IWebBrowser2 *wb, const WCHAR *exur
|
|||
}
|
||||
}
|
||||
|
||||
#define test_LocationName(a,b) _test_LocationName(__LINE__,a,b)
|
||||
static void _test_LocationName(unsigned line, IWebBrowser2 *wb, const WCHAR *exname)
|
||||
{
|
||||
BSTR name = (void*)0xdeadbeef;
|
||||
HRESULT hres;
|
||||
|
||||
hres = IWebBrowser2_get_LocationName(wb, &name);
|
||||
ok_(__FILE__,line) (hres == (*exname ? S_OK : S_FALSE), "get_LocationName failed: %08x\n", hres);
|
||||
ok_(__FILE__,line) (!lstrcmpW(name, exname) || broken(is_http && !lstrcmpW(name, current_url)) /* Win10 2004 */,
|
||||
"expected %s, got %s\n", wine_dbgstr_w(exname), wine_dbgstr_w(name));
|
||||
SysFreeString(name);
|
||||
}
|
||||
|
||||
#define test_ready_state(a,b) _test_ready_state(__LINE__,a,b)
|
||||
static void _test_ready_state(unsigned line, READYSTATE exstate, VARIANT_BOOL expect_busy)
|
||||
{
|
||||
|
@ -2785,11 +2798,13 @@ static void test_ConnectionPoint(IWebBrowser2 *unk, BOOL init)
|
|||
|
||||
static void test_Navigate2(IWebBrowser2 *webbrowser, const WCHAR *nav_url)
|
||||
{
|
||||
const WCHAR *title = L"WineHQ - Run Windows applications on Linux, BSD, Solaris and Mac OS X";
|
||||
VARIANT url;
|
||||
BOOL is_file;
|
||||
HRESULT hres;
|
||||
|
||||
test_LocationURL(webbrowser, is_first_load ? L"" : current_url);
|
||||
test_LocationName(webbrowser, is_first_load ? L"" : (is_http ? title : current_url));
|
||||
test_ready_state(is_first_load ? READYSTATE_UNINITIALIZED : READYSTATE_COMPLETE, VARIANT_FALSE);
|
||||
|
||||
is_http = !memcmp(nav_url, "http:", 5);
|
||||
|
|
|
@ -539,8 +539,25 @@ static HRESULT WINAPI WebBrowser_put_Height(IWebBrowser2 *iface, LONG Height)
|
|||
static HRESULT WINAPI WebBrowser_get_LocationName(IWebBrowser2 *iface, BSTR *LocationName)
|
||||
{
|
||||
WebBrowser *This = impl_from_IWebBrowser2(iface);
|
||||
FIXME("(%p)->(%p)\n", This, LocationName);
|
||||
return E_NOTIMPL;
|
||||
IHTMLDocument2 *doc;
|
||||
HRESULT hres;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, LocationName);
|
||||
|
||||
if(This->doc_host.document &&
|
||||
SUCCEEDED(IUnknown_QueryInterface(This->doc_host.document, &IID_IHTMLDocument2, (void **)&doc))) {
|
||||
hres = IHTMLDocument2_get_title(doc, LocationName);
|
||||
if(hres == S_OK && !SysStringLen(*LocationName)) {
|
||||
SysFreeString(*LocationName);
|
||||
hres = get_location_url(&This->doc_host, LocationName);
|
||||
}
|
||||
IHTMLDocument2_Release(doc);
|
||||
} else {
|
||||
*LocationName = SysAllocString(L"");
|
||||
hres = S_FALSE;
|
||||
}
|
||||
|
||||
return hres;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI WebBrowser_get_LocationURL(IWebBrowser2 *iface, BSTR *LocationURL)
|
||||
|
|
|
@ -44,15 +44,90 @@ BOOL WINAPI BindImage(
|
|||
/***********************************************************************
|
||||
* BindImageEx (IMAGEHLP.@)
|
||||
*/
|
||||
BOOL WINAPI BindImageEx(
|
||||
DWORD Flags, PCSTR ImageName, PCSTR DllPath, PCSTR SymbolPath,
|
||||
PIMAGEHLP_STATUS_ROUTINE StatusRoutine)
|
||||
BOOL WINAPI BindImageEx(DWORD flags, const char *module, const char *dll_path,
|
||||
const char *symbol_path, PIMAGEHLP_STATUS_ROUTINE cb)
|
||||
{
|
||||
FIXME("(%d, %s, %s, %s, %p): stub\n",
|
||||
Flags, debugstr_a(ImageName), debugstr_a(DllPath),
|
||||
debugstr_a(SymbolPath), StatusRoutine
|
||||
);
|
||||
return TRUE;
|
||||
const IMAGE_IMPORT_DESCRIPTOR *import;
|
||||
LOADED_IMAGE image;
|
||||
ULONG size;
|
||||
|
||||
TRACE("flags %#x, module %s, dll_path %s, symbol_path %s, cb %p.\n",
|
||||
flags, debugstr_a(module), debugstr_a(dll_path), debugstr_a(symbol_path), cb);
|
||||
|
||||
if (!(flags & BIND_NO_UPDATE))
|
||||
FIXME("Image modification is not implemented.\n");
|
||||
if (flags & ~BIND_NO_UPDATE)
|
||||
FIXME("Ignoring flags %#x.\n", flags);
|
||||
|
||||
if (!MapAndLoad(module, dll_path, &image, TRUE, TRUE))
|
||||
return FALSE;
|
||||
|
||||
if (!(import = ImageDirectoryEntryToData(image.MappedAddress, FALSE, IMAGE_DIRECTORY_ENTRY_IMPORT, &size)))
|
||||
{
|
||||
UnMapAndLoad(&image);
|
||||
return TRUE; /* no imports */
|
||||
}
|
||||
|
||||
if (image.FileHeader->OptionalHeader.Magic != IMAGE_NT_OPTIONAL_HDR_MAGIC)
|
||||
{
|
||||
FIXME("Unhandled architecture %#x.\n", image.FileHeader->OptionalHeader.Magic);
|
||||
UnMapAndLoad(&image);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
for (; import->Name && import->FirstThunk; ++import)
|
||||
{
|
||||
char full_path[MAX_PATH];
|
||||
IMAGE_THUNK_DATA *thunk;
|
||||
const char *dll_name;
|
||||
DWORD thunk_rva;
|
||||
|
||||
if (!(dll_name = ImageRvaToVa(image.FileHeader, image.MappedAddress, import->Name, 0)))
|
||||
{
|
||||
ERR("Failed to get VA for import name RVA %#x.\n", import->Name);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (cb) cb(BindImportModule, module, dll_name, 0, 0);
|
||||
|
||||
if (!SearchPathA(dll_path, dll_name, 0, sizeof(full_path), full_path, 0))
|
||||
{
|
||||
ERR("Import %s was not found.\n", debugstr_a(dll_path));
|
||||
continue;
|
||||
}
|
||||
|
||||
thunk_rva = import->OriginalFirstThunk ? import->OriginalFirstThunk : import->FirstThunk;
|
||||
if (!(thunk = ImageRvaToVa(image.FileHeader, image.MappedAddress, thunk_rva, 0)))
|
||||
{
|
||||
ERR("Failed to get VA for import thunk RVA %#x.\n", thunk_rva);
|
||||
continue;
|
||||
}
|
||||
|
||||
for (; thunk->u1.Ordinal; ++thunk)
|
||||
{
|
||||
if (IMAGE_SNAP_BY_ORDINAL(thunk->u1.Ordinal))
|
||||
{
|
||||
/* FIXME: We apparently need to subtract the actual module's
|
||||
* ordinal base. */
|
||||
FIXME("Ordinal imports are not implemented.\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
IMAGE_IMPORT_BY_NAME *name;
|
||||
|
||||
if (!(name = ImageRvaToVa(image.FileHeader, image.MappedAddress, thunk->u1.AddressOfData, 0)))
|
||||
{
|
||||
ERR("Failed to get VA for name RVA %#x.\n", thunk->u1.AddressOfData);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (cb) cb(BindImportProcedure, module, full_path, 0, (ULONG_PTR)name->Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
UnMapAndLoad(&image);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
TESTDLL = imagehlp.dll
|
||||
IMPORTS = imagehlp psapi
|
||||
|
||||
C_SRCS = \
|
||||
testdll_IMPORTS = oleaut32 comdlg32 shlwapi
|
||||
|
||||
SOURCES = \
|
||||
image.c \
|
||||
integrity.c
|
||||
integrity.c \
|
||||
testdll.c \
|
||||
testdll.spec
|
||||
|
|
|
@ -24,19 +24,35 @@
|
|||
#include <winbase.h>
|
||||
#include <winver.h>
|
||||
#include <winnt.h>
|
||||
#include <winuser.h>
|
||||
#include <imagehlp.h>
|
||||
|
||||
#include "wine/test.h"
|
||||
|
||||
static HMODULE hImageHlp;
|
||||
static char *load_resource(const char *name)
|
||||
{
|
||||
static char path[MAX_PATH];
|
||||
DWORD written;
|
||||
HANDLE file;
|
||||
HRSRC res;
|
||||
void *ptr;
|
||||
|
||||
static BOOL (WINAPI *pImageGetDigestStream)(HANDLE, DWORD, DIGEST_FUNCTION, DIGEST_HANDLE);
|
||||
static BOOL (WINAPI *pBindImageEx)(DWORD Flags, const char *ImageName, const char *DllPath,
|
||||
const char *SymbolPath, PIMAGEHLP_STATUS_ROUTINE StatusRoutine);
|
||||
static DWORD (WINAPI *pGetImageUnusedHeaderBytes)(PLOADED_IMAGE, LPDWORD);
|
||||
static PLOADED_IMAGE (WINAPI *pImageLoad)(PCSTR, PCSTR);
|
||||
static BOOL (WINAPI *pImageUnload)(PLOADED_IMAGE);
|
||||
GetTempPathA(ARRAY_SIZE(path), path);
|
||||
strcat(path, name);
|
||||
|
||||
file = CreateFileA(path, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0);
|
||||
ok(file != INVALID_HANDLE_VALUE, "Failed to create file %s, error %u.\n",
|
||||
debugstr_a(path), GetLastError());
|
||||
|
||||
res = FindResourceA(NULL, name, "TESTDLL");
|
||||
ok(!!res, "Failed to load resource, error %u.\n", GetLastError());
|
||||
ptr = LockResource(LoadResource(GetModuleHandleA(NULL), res));
|
||||
WriteFile(file, ptr, SizeofResource( GetModuleHandleA(NULL), res), &written, NULL);
|
||||
ok(written == SizeofResource(GetModuleHandleA(NULL), res), "Failed to write resource.\n");
|
||||
CloseHandle(file);
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
/* minimal PE file image */
|
||||
#define VA_START 0x400000
|
||||
|
@ -155,9 +171,6 @@ struct expected_update_accum
|
|||
BOOL todo;
|
||||
};
|
||||
|
||||
static int status_routine_called[BindSymbolsNotUpdated+1];
|
||||
|
||||
|
||||
static BOOL WINAPI accumulating_stream_output(DIGEST_HANDLE handle, BYTE *pb,
|
||||
DWORD cb)
|
||||
{
|
||||
|
@ -280,40 +293,6 @@ static void update_checksum(void)
|
|||
bin.nt_headers.OptionalHeader.CheckSum = sum;
|
||||
}
|
||||
|
||||
static BOOL CALLBACK testing_status_routine(IMAGEHLP_STATUS_REASON reason, const char *ImageName,
|
||||
const char *DllName, ULONG_PTR Va, ULONG_PTR Parameter)
|
||||
{
|
||||
char kernel32_path[MAX_PATH];
|
||||
|
||||
if (0 <= (int)reason && reason <= BindSymbolsNotUpdated)
|
||||
status_routine_called[reason]++;
|
||||
else
|
||||
ok(0, "expected reason between 0 and %d, got %d\n", BindSymbolsNotUpdated+1, reason);
|
||||
|
||||
switch(reason)
|
||||
{
|
||||
case BindImportModule:
|
||||
ok(!strcmp(DllName, "KERNEL32.DLL"), "expected DllName to be KERNEL32.DLL, got %s\n",
|
||||
DllName);
|
||||
break;
|
||||
|
||||
case BindImportProcedure:
|
||||
case BindForwarderNOT:
|
||||
GetSystemDirectoryA(kernel32_path, MAX_PATH);
|
||||
strcat(kernel32_path, "\\KERNEL32.DLL");
|
||||
ok(!lstrcmpiA(DllName, kernel32_path), "expected DllName to be %s, got %s\n",
|
||||
kernel32_path, DllName);
|
||||
ok(!strcmp((char *)Parameter, "ExitProcess"),
|
||||
"expected Parameter to be ExitProcess, got %s\n", (char *)Parameter);
|
||||
break;
|
||||
|
||||
default:
|
||||
ok(0, "got unexpected reason %d\n", reason);
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void test_get_digest_stream(void)
|
||||
{
|
||||
BOOL ret;
|
||||
|
@ -322,13 +301,8 @@ static void test_get_digest_stream(void)
|
|||
DWORD count;
|
||||
struct update_accum accum = { 0, NULL };
|
||||
|
||||
if (!pImageGetDigestStream)
|
||||
{
|
||||
win_skip("ImageGetDigestStream function is not available\n");
|
||||
return;
|
||||
}
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pImageGetDigestStream(NULL, 0, NULL, NULL);
|
||||
ret = ImageGetDigestStream(NULL, 0, NULL, NULL);
|
||||
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
|
||||
"expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
|
||||
file = create_temp_file(temp_file);
|
||||
|
@ -338,16 +312,16 @@ static void test_get_digest_stream(void)
|
|||
return;
|
||||
}
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pImageGetDigestStream(file, 0, NULL, NULL);
|
||||
ret = ImageGetDigestStream(file, 0, NULL, NULL);
|
||||
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
|
||||
"expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pImageGetDigestStream(NULL, 0, accumulating_stream_output, &accum);
|
||||
ret = ImageGetDigestStream(NULL, 0, accumulating_stream_output, &accum);
|
||||
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
|
||||
"expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
|
||||
/* Even with "valid" parameters, it fails with an empty file */
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pImageGetDigestStream(file, 0, accumulating_stream_output, &accum);
|
||||
ret = ImageGetDigestStream(file, 0, accumulating_stream_output, &accum);
|
||||
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
|
||||
"expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
|
||||
/* Finally, with a valid executable in the file, it succeeds. Note that
|
||||
|
@ -362,11 +336,11 @@ static void test_get_digest_stream(void)
|
|||
bin.nt_headers.OptionalHeader.SizeOfInitializedData = 0;
|
||||
bin.nt_headers.OptionalHeader.SizeOfImage = 0;
|
||||
|
||||
ret = pImageGetDigestStream(file, 0, accumulating_stream_output, &accum);
|
||||
ret = ImageGetDigestStream(file, 0, accumulating_stream_output, &accum);
|
||||
ok(ret, "ImageGetDigestStream failed: %d\n", GetLastError());
|
||||
check_updates("flags = 0", &a1, &accum);
|
||||
free_updates(&accum);
|
||||
ret = pImageGetDigestStream(file, CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO,
|
||||
ret = ImageGetDigestStream(file, CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO,
|
||||
accumulating_stream_output, &accum);
|
||||
ok(ret, "ImageGetDigestStream failed: %d\n", GetLastError());
|
||||
check_updates("flags = CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO", &a2, &accum);
|
||||
|
@ -375,58 +349,78 @@ static void test_get_digest_stream(void)
|
|||
DeleteFileA(temp_file);
|
||||
}
|
||||
|
||||
static unsigned int got_SysAllocString, got_GetOpenFileNameA, got_SHRegGetIntW;
|
||||
|
||||
static BOOL WINAPI bind_image_cb(IMAGEHLP_STATUS_REASON reason, const char *file,
|
||||
const char *module, ULONG_PTR va, ULONG_PTR param)
|
||||
{
|
||||
static char last_module[MAX_PATH];
|
||||
|
||||
if (winetest_debug > 1)
|
||||
trace("reason %u, file %s, module %s, va %#Ix, param %#Ix\n",
|
||||
reason, debugstr_a(file), debugstr_a(module), va, param);
|
||||
|
||||
if (reason == BindImportModule)
|
||||
{
|
||||
ok(!strchr(module, '\\'), "got module name %s\n", debugstr_a(module));
|
||||
strcpy(last_module, module);
|
||||
ok(!va, "got VA %#Ix\n", va);
|
||||
ok(!param, "got param %#Ix\n", param);
|
||||
}
|
||||
else if (reason == BindImportProcedure)
|
||||
{
|
||||
char full_path[MAX_PATH];
|
||||
BOOL ret;
|
||||
|
||||
todo_wine ok(!!va, "expected nonzero VA\n");
|
||||
ret = SearchPathA(NULL, last_module, ".dll", sizeof(full_path), full_path, NULL);
|
||||
ok(ret, "got error %u\n", GetLastError());
|
||||
ok(!strcmp(module, full_path), "expected %s, got %s\n", debugstr_a(full_path), debugstr_a(module));
|
||||
|
||||
if (!strcmp((const char *)param, "SysAllocString"))
|
||||
{
|
||||
ok(!strcmp(last_module, "oleaut32.dll"), "got wrong module %s\n", debugstr_a(module));
|
||||
++got_SysAllocString;
|
||||
}
|
||||
else if (!strcmp((const char *)param, "GetOpenFileNameA"))
|
||||
{
|
||||
ok(!strcmp(last_module, "comdlg32.dll"), "got wrong module %s\n", debugstr_a(module));
|
||||
++got_GetOpenFileNameA;
|
||||
}
|
||||
else if (!strcmp((const char *)param, "Ordinal117"))
|
||||
{
|
||||
ok(!strcmp(last_module, "shlwapi.dll"), "got wrong module %s\n", debugstr_a(module));
|
||||
++got_SHRegGetIntW;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ok(0, "got unexpected reason %#x\n", reason);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void test_bind_image_ex(void)
|
||||
{
|
||||
const char *filename = load_resource("testdll.dll");
|
||||
BOOL ret;
|
||||
HANDLE file;
|
||||
char temp_file[MAX_PATH];
|
||||
DWORD count;
|
||||
|
||||
if (!pBindImageEx)
|
||||
{
|
||||
win_skip("BindImageEx function is not available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* call with a non-existent file */
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pBindImageEx(BIND_NO_BOUND_IMPORTS | BIND_NO_UPDATE | BIND_ALL_IMAGES, "nonexistent.dll", 0, 0,
|
||||
testing_status_routine);
|
||||
todo_wine ok(!ret && ((GetLastError() == ERROR_FILE_NOT_FOUND) ||
|
||||
(GetLastError() == ERROR_INVALID_PARAMETER)),
|
||||
"expected ERROR_FILE_NOT_FOUND or ERROR_INVALID_PARAMETER, got %d\n",
|
||||
GetLastError());
|
||||
ret = BindImageEx(BIND_ALL_IMAGES | BIND_NO_BOUND_IMPORTS | BIND_NO_UPDATE,
|
||||
"nonexistent.dll", 0, 0, bind_image_cb);
|
||||
ok(!ret, "expected failure\n");
|
||||
ok(GetLastError() == ERROR_FILE_NOT_FOUND || GetLastError() == ERROR_INVALID_PARAMETER,
|
||||
"got error %u\n", GetLastError());
|
||||
|
||||
file = create_temp_file(temp_file);
|
||||
if (file == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
skip("couldn't create temp file\n");
|
||||
return;
|
||||
}
|
||||
ret = BindImageEx(BIND_ALL_IMAGES | BIND_NO_BOUND_IMPORTS | BIND_NO_UPDATE,
|
||||
filename, NULL, NULL, bind_image_cb);
|
||||
ok(ret, "got error %u\n", GetLastError());
|
||||
ok(got_SysAllocString == 1, "got %u imports of SysAllocString\n", got_SysAllocString);
|
||||
ok(got_GetOpenFileNameA == 1, "got %u imports of GetOpenFileNameA\n", got_GetOpenFileNameA);
|
||||
todo_wine ok(got_SHRegGetIntW == 1, "got %u imports of SHRegGetIntW\n", got_SHRegGetIntW);
|
||||
|
||||
WriteFile(file, &bin, sizeof(bin), &count, NULL);
|
||||
CloseHandle(file);
|
||||
|
||||
/* call with a proper PE file, but with StatusRoutine set to NULL */
|
||||
ret = pBindImageEx(BIND_NO_BOUND_IMPORTS | BIND_NO_UPDATE | BIND_ALL_IMAGES, temp_file, 0, 0,
|
||||
NULL);
|
||||
ok(ret, "BindImageEx failed: %d\n", GetLastError());
|
||||
|
||||
/* call with a proper PE file and StatusRoutine */
|
||||
ret = pBindImageEx(BIND_NO_BOUND_IMPORTS | BIND_NO_UPDATE | BIND_ALL_IMAGES, temp_file, 0, 0,
|
||||
testing_status_routine);
|
||||
ok(ret, "BindImageEx failed: %d\n", GetLastError());
|
||||
|
||||
todo_wine ok(status_routine_called[BindImportModule] == 1,
|
||||
"StatusRoutine was called %d times\n", status_routine_called[BindImportModule]);
|
||||
|
||||
todo_wine ok((status_routine_called[BindImportProcedure] == 1)
|
||||
#if defined(_WIN64)
|
||||
|| broken(status_routine_called[BindImportProcedure] == 0) /* < Win8 */
|
||||
#endif
|
||||
, "StatusRoutine was called %d times\n", status_routine_called[BindImportProcedure]);
|
||||
|
||||
DeleteFileA(temp_file);
|
||||
ret = DeleteFileA(filename);
|
||||
ok(ret, "got error %u\n", GetLastError());
|
||||
}
|
||||
|
||||
static void test_image_load(void)
|
||||
|
@ -436,12 +430,6 @@ static void test_image_load(void)
|
|||
DWORD ret, count;
|
||||
HANDLE file;
|
||||
|
||||
if (!pImageLoad || !pImageUnload || !pGetImageUnusedHeaderBytes)
|
||||
{
|
||||
win_skip("ImageLoad functions are not available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
file = create_temp_file(temp_file);
|
||||
if (file == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
|
@ -452,7 +440,7 @@ static void test_image_load(void)
|
|||
WriteFile(file, &bin, sizeof(bin), &count, NULL);
|
||||
CloseHandle(file);
|
||||
|
||||
img = pImageLoad(temp_file, NULL);
|
||||
img = ImageLoad(temp_file, NULL);
|
||||
ok(img != NULL, "ImageLoad unexpectedly failed\n");
|
||||
|
||||
if (img)
|
||||
|
@ -499,13 +487,13 @@ static void test_image_load(void)
|
|||
"unexpected SizeOfImage, got 0x%x instead of 0x600\n", img->SizeOfImage);
|
||||
|
||||
count = 0xdeadbeef;
|
||||
ret = pGetImageUnusedHeaderBytes(img, &count);
|
||||
ret = GetImageUnusedHeaderBytes(img, &count);
|
||||
todo_wine
|
||||
ok(ret == 448, "GetImageUnusedHeaderBytes returned %u instead of 448\n", ret);
|
||||
todo_wine
|
||||
ok(count == 64, "unexpected size for unused header bytes, got %u instead of 64\n", count);
|
||||
|
||||
pImageUnload(img);
|
||||
ImageUnload(img);
|
||||
}
|
||||
|
||||
DeleteFileA(temp_file);
|
||||
|
@ -513,23 +501,7 @@ static void test_image_load(void)
|
|||
|
||||
START_TEST(image)
|
||||
{
|
||||
hImageHlp = LoadLibraryA("imagehlp.dll");
|
||||
|
||||
if (!hImageHlp)
|
||||
{
|
||||
win_skip("ImageHlp unavailable\n");
|
||||
return;
|
||||
}
|
||||
|
||||
pImageGetDigestStream = (void *) GetProcAddress(hImageHlp, "ImageGetDigestStream");
|
||||
pBindImageEx = (void *) GetProcAddress(hImageHlp, "BindImageEx");
|
||||
pGetImageUnusedHeaderBytes = (void *) GetProcAddress(hImageHlp, "GetImageUnusedHeaderBytes");
|
||||
pImageLoad = (void *) GetProcAddress(hImageHlp, "ImageLoad");
|
||||
pImageUnload = (void *) GetProcAddress(hImageHlp, "ImageUnload");
|
||||
|
||||
test_get_digest_stream();
|
||||
test_bind_image_ex();
|
||||
test_image_load();
|
||||
|
||||
FreeLibrary(hImageHlp);
|
||||
}
|
||||
|
|
|
@ -26,20 +26,12 @@
|
|||
#include "winerror.h"
|
||||
#include "winnt.h"
|
||||
#include "imagehlp.h"
|
||||
#define PSAPI_VERSION 1
|
||||
#include "psapi.h"
|
||||
|
||||
static HMODULE hImageHlp, hPsapi, hNtdll;
|
||||
static HMODULE hNtdll;
|
||||
static char test_dll_path[MAX_PATH];
|
||||
|
||||
static BOOL (WINAPI *pImageAddCertificate)(HANDLE, LPWIN_CERTIFICATE, PDWORD);
|
||||
static BOOL (WINAPI *pImageEnumerateCertificates)(HANDLE, WORD, PDWORD, PDWORD, DWORD);
|
||||
static BOOL (WINAPI *pImageGetCertificateData)(HANDLE, DWORD, LPWIN_CERTIFICATE, PDWORD);
|
||||
static BOOL (WINAPI *pImageGetCertificateHeader)(HANDLE, DWORD, LPWIN_CERTIFICATE);
|
||||
static BOOL (WINAPI *pImageRemoveCertificate)(HANDLE, DWORD);
|
||||
static PIMAGE_NT_HEADERS (WINAPI *pCheckSumMappedFile)(PVOID, DWORD, PDWORD, PDWORD);
|
||||
|
||||
static BOOL (WINAPI *pGetModuleInformation)(HANDLE, HMODULE, LPMODULEINFO, DWORD);
|
||||
|
||||
static PIMAGE_NT_HEADERS (WINAPI *pRtlImageNtHeader)(PVOID);
|
||||
|
||||
static const char test_cert_data[] =
|
||||
|
@ -193,7 +185,7 @@ static DWORD test_add_certificate(const char *cert_data, int len)
|
|||
cert->wCertificateType = WIN_CERT_TYPE_PKCS_SIGNED_DATA;
|
||||
CopyMemory(cert->bCertificate, cert_data, len);
|
||||
|
||||
ret = pImageAddCertificate(hFile, cert, &index);
|
||||
ret = ImageAddCertificate(hFile, cert, &index);
|
||||
ok(ret, "Unable to add certificate to image, error %x\n", GetLastError());
|
||||
trace("added cert index %d\n", index);
|
||||
|
||||
|
@ -218,7 +210,7 @@ static void test_get_certificate(const char *cert_data, int index)
|
|||
return;
|
||||
}
|
||||
|
||||
ret = pImageGetCertificateData(hFile, index, NULL, &cert_len);
|
||||
ret = ImageGetCertificateData(hFile, index, NULL, &cert_len);
|
||||
err = GetLastError();
|
||||
|
||||
ok ((ret == FALSE) && (err == ERROR_INSUFFICIENT_BUFFER), "ImageGetCertificateData gave unexpected result; ret=%d / err=%x\n", ret, err);
|
||||
|
@ -232,7 +224,7 @@ static void test_get_certificate(const char *cert_data, int index)
|
|||
return;
|
||||
}
|
||||
|
||||
ret = pImageGetCertificateData(hFile, index, cert, &cert_len);
|
||||
ret = ImageGetCertificateData(hFile, index, cert, &cert_len);
|
||||
ok(ret, "Unable to retrieve certificate; err=%x\n", GetLastError());
|
||||
ok(memcmp(cert->bCertificate, cert_data, cert_len - sizeof(WIN_CERTIFICATE)) == 0, "Certificate retrieved did not match original\n");
|
||||
|
||||
|
@ -254,13 +246,13 @@ static void test_remove_certificate(int index)
|
|||
return;
|
||||
}
|
||||
|
||||
ret = pImageEnumerateCertificates(hFile, CERT_SECTION_TYPE_ANY, &orig_count, NULL, 0);
|
||||
ret = ImageEnumerateCertificates(hFile, CERT_SECTION_TYPE_ANY, &orig_count, NULL, 0);
|
||||
ok (ret, "Unable to enumerate certificates in file; err=%x\n", GetLastError());
|
||||
ret = pImageRemoveCertificate(hFile, index);
|
||||
ret = ImageRemoveCertificate(hFile, index);
|
||||
ok (ret, "Unable to remove certificate from file; err=%x\n", GetLastError());
|
||||
|
||||
/* Test to see if the certificate has actually been removed */
|
||||
pImageEnumerateCertificates(hFile, CERT_SECTION_TYPE_ANY, &count, NULL, 0);
|
||||
ImageEnumerateCertificates(hFile, CERT_SECTION_TYPE_ANY, &count, NULL, 0);
|
||||
ok (count == orig_count - 1, "Certificate count mismatch; orig=%d new=%d\n", orig_count, count);
|
||||
|
||||
CloseHandle(hFile);
|
||||
|
@ -275,20 +267,14 @@ static void test_pe_checksum(void)
|
|||
char buffer[20];
|
||||
BOOL ret_bool;
|
||||
|
||||
if (!pCheckSumMappedFile)
|
||||
{
|
||||
win_skip("CheckSumMappedFile not supported, skipping tests\n");
|
||||
return;
|
||||
}
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCheckSumMappedFile(NULL, 0, &checksum_orig, &checksum_new);
|
||||
ret = CheckSumMappedFile(NULL, 0, &checksum_orig, &checksum_new);
|
||||
ok(!ret, "Expected CheckSumMappedFile to fail, got %p\n", ret);
|
||||
ok(((GetLastError() == ERROR_INVALID_PARAMETER)||(GetLastError() == 0xdeadbeef)),
|
||||
"Expected 0xdeadbeef (XP) or ERROR_INVALID_PARAMETER (Vista+), got %x\n", GetLastError());
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCheckSumMappedFile((void *)0xdeadbeef, 0, &checksum_orig, &checksum_new);
|
||||
ret = CheckSumMappedFile((void *)0xdeadbeef, 0, &checksum_orig, &checksum_new);
|
||||
ok(!ret, "Expected CheckSumMappedFile to fail, got %p\n", ret);
|
||||
ok(((GetLastError() == ERROR_INVALID_PARAMETER)||(GetLastError() == 0xdeadbeef)),
|
||||
"Expected 0xdeadbeef (XP) or ERROR_INVALID_PARAMETER (Vista+), got %x\n", GetLastError());
|
||||
|
@ -296,53 +282,47 @@ static void test_pe_checksum(void)
|
|||
/* basic checksum tests */
|
||||
memset(buffer, 0x11, sizeof(buffer));
|
||||
checksum_orig = checksum_new = 0xdeadbeef;
|
||||
ret = pCheckSumMappedFile(buffer, sizeof(buffer), &checksum_orig, &checksum_new);
|
||||
ret = CheckSumMappedFile(buffer, sizeof(buffer), &checksum_orig, &checksum_new);
|
||||
ok(ret == NULL, "Expected NULL, got %p\n", ret);
|
||||
todo_wine ok(checksum_orig == 0, "Expected 0, got %x\n", checksum_orig);
|
||||
todo_wine ok(checksum_new == 0xaabe, "Expected 0xaabe, got %x\n", checksum_new);
|
||||
|
||||
memset(buffer, 0x22, sizeof(buffer));
|
||||
checksum_orig = checksum_new = 0xdeadbeef;
|
||||
ret = pCheckSumMappedFile(buffer, sizeof(buffer), &checksum_orig, &checksum_new);
|
||||
ret = CheckSumMappedFile(buffer, sizeof(buffer), &checksum_orig, &checksum_new);
|
||||
ok(ret == NULL, "Expected NULL, got %p\n", ret);
|
||||
todo_wine ok(checksum_orig == 0, "Expected 0, got %x\n", checksum_orig);
|
||||
todo_wine ok(checksum_new == 0x5569, "Expected 0x5569, got %x\n", checksum_new);
|
||||
|
||||
memset(buffer, 0x22, sizeof(buffer));
|
||||
checksum_orig = checksum_new = 0xdeadbeef;
|
||||
ret = pCheckSumMappedFile(buffer, 10, &checksum_orig, &checksum_new);
|
||||
ret = CheckSumMappedFile(buffer, 10, &checksum_orig, &checksum_new);
|
||||
ok(ret == NULL, "Expected NULL, got %p\n", ret);
|
||||
todo_wine ok(checksum_orig == 0, "Expected 0, got %x\n", checksum_orig);
|
||||
todo_wine ok(checksum_new == 0xaab4, "Expected 0xaab4, got %x\n", checksum_new);
|
||||
|
||||
memset(buffer, 0x22, sizeof(buffer));
|
||||
checksum_orig = checksum_new = 0xdeadbeef;
|
||||
ret = pCheckSumMappedFile(buffer, 11, &checksum_orig, &checksum_new);
|
||||
ret = CheckSumMappedFile(buffer, 11, &checksum_orig, &checksum_new);
|
||||
ok(ret == NULL, "Expected NULL, got %p\n", ret);
|
||||
todo_wine ok(checksum_orig == 0, "Expected 0, got %x\n", checksum_orig);
|
||||
todo_wine ok(checksum_new == 0xaad7, "Expected 0xaad7, got %x\n", checksum_new);
|
||||
|
||||
/* test checksum of PE module */
|
||||
checksum_orig = checksum_new = 0xdeadbeef;
|
||||
ret = pCheckSumMappedFile(test_pe_executable, sizeof(test_pe_executable),
|
||||
ret = CheckSumMappedFile(test_pe_executable, sizeof(test_pe_executable),
|
||||
&checksum_orig, &checksum_new);
|
||||
ok((char *)ret == test_pe_executable + 0x80, "Expected %p, got %p\n", test_pe_executable + 0x80, ret);
|
||||
ok(checksum_orig == 0xabcdef11, "Expected 0xabcdef11, got %x\n", checksum_orig);
|
||||
ok(checksum_new == 0xaa4, "Expected 0xaa4, got %x\n", checksum_new);
|
||||
|
||||
if (!pGetModuleInformation)
|
||||
{
|
||||
win_skip("GetModuleInformation not supported, skipping tests\n");
|
||||
return;
|
||||
}
|
||||
|
||||
ret_bool = pGetModuleInformation(GetCurrentProcess(), GetModuleHandleA(NULL),
|
||||
ret_bool = GetModuleInformation(GetCurrentProcess(), GetModuleHandleA(NULL),
|
||||
&modinfo, sizeof(modinfo));
|
||||
ok(ret_bool, "GetModuleInformation failed, error: %x\n", GetLastError());
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
checksum_orig = checksum_new = 0xdeadbeef;
|
||||
ret = pCheckSumMappedFile(modinfo.lpBaseOfDll, modinfo.SizeOfImage, &checksum_orig, &checksum_new);
|
||||
ret = CheckSumMappedFile(modinfo.lpBaseOfDll, modinfo.SizeOfImage, &checksum_orig, &checksum_new);
|
||||
ok(ret != NULL, "Expected CheckSumMappedFile to succeed\n");
|
||||
ok(GetLastError() == 0xdeadbeef, "Expected err=0xdeadbeef, got %x\n", GetLastError());
|
||||
ok(checksum_orig != 0xdeadbeef, "Expected orig checksum != 0xdeadbeef\n");
|
||||
|
@ -350,7 +330,7 @@ static void test_pe_checksum(void)
|
|||
|
||||
SetLastError(0xdeadbeef);
|
||||
checksum_orig = checksum_new = 0xdeadbeef;
|
||||
ret = pCheckSumMappedFile((char *)modinfo.lpBaseOfDll + 100, modinfo.SizeOfImage - 100,
|
||||
ret = CheckSumMappedFile((char *)modinfo.lpBaseOfDll + 100, modinfo.SizeOfImage - 100,
|
||||
&checksum_orig, &checksum_new);
|
||||
ok(!ret, "Expected CheckSumMappedFile to fail, got %p\n", ret);
|
||||
ok(GetLastError() == 0xdeadbeef, "Expected err=0xdeadbeef, got %x\n", GetLastError());
|
||||
|
@ -361,27 +341,27 @@ static void test_pe_checksum(void)
|
|||
checksum_correct = nt_header->OptionalHeader.CheckSum;
|
||||
|
||||
checksum_orig = checksum_new = 0xdeadbeef;
|
||||
ret = pCheckSumMappedFile(modinfo.lpBaseOfDll, (char *)nt_header - (char *)modinfo.lpBaseOfDll,
|
||||
ret = CheckSumMappedFile(modinfo.lpBaseOfDll, (char *)nt_header - (char *)modinfo.lpBaseOfDll,
|
||||
&checksum_orig, &checksum_new);
|
||||
ok(!ret || (ret == nt_header), "Expected CheckSumMappedFile to fail, got %p\n", ret);
|
||||
ok((checksum_orig == 0) || (checksum_orig == checksum_correct), "Expected %x, got %x\n", checksum_correct, checksum_orig);
|
||||
ok(checksum_new != 0 && checksum_new != 0xdeadbeef, "Got unexpected value %x\n", checksum_new);
|
||||
|
||||
checksum_orig = checksum_new = 0xdeadbeef;
|
||||
ret = pCheckSumMappedFile(modinfo.lpBaseOfDll, sizeof(IMAGE_DOS_HEADER),
|
||||
ret = CheckSumMappedFile(modinfo.lpBaseOfDll, sizeof(IMAGE_DOS_HEADER),
|
||||
&checksum_orig, &checksum_new);
|
||||
ok(!ret || (ret == nt_header), "Expected CheckSumMappedFile to fail, got %p\n", ret);
|
||||
ok((checksum_orig == 0) || (checksum_orig == checksum_correct), "Expected %x, got %x\n", checksum_correct, checksum_orig);
|
||||
ok(checksum_new != 0 && checksum_new != 0xdeadbeef, "Got unexpected value %x\n", checksum_new);
|
||||
|
||||
checksum_orig = checksum_new = 0xdeadbeef;
|
||||
ret = pCheckSumMappedFile(modinfo.lpBaseOfDll, 0, &checksum_orig, &checksum_new);
|
||||
ret = CheckSumMappedFile(modinfo.lpBaseOfDll, 0, &checksum_orig, &checksum_new);
|
||||
ok(!ret || (ret == nt_header), "Expected CheckSumMappedFile to fail, got %p\n", ret);
|
||||
ok((checksum_orig == 0xdeadbeef) || (checksum_orig == checksum_correct), "Expected %x, got %x\n", checksum_correct, checksum_orig);
|
||||
ok((checksum_new == 0xdeadbeef) || (checksum_new != 0 && checksum_new != 0xdeadbeef), "Got unexpected value %x\n", checksum_new);
|
||||
|
||||
checksum_orig = checksum_new = 0xdeadbeef;
|
||||
ret = pCheckSumMappedFile((char *)modinfo.lpBaseOfDll + 1, 0,
|
||||
ret = CheckSumMappedFile((char *)modinfo.lpBaseOfDll + 1, 0,
|
||||
&checksum_orig, &checksum_new);
|
||||
ok(ret == NULL, "Expected NULL, got %p\n", ret);
|
||||
ok((checksum_orig == 0) || (checksum_orig == 0xdeadbeef), "Expected 0, got %x\n", checksum_orig);
|
||||
|
@ -392,33 +372,11 @@ START_TEST(integrity)
|
|||
{
|
||||
DWORD file_size, file_size_orig, first, second;
|
||||
|
||||
hImageHlp = LoadLibraryA("imagehlp.dll");
|
||||
|
||||
if (!hImageHlp)
|
||||
{
|
||||
win_skip("ImageHlp unavailable\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!copy_dll_file())
|
||||
{
|
||||
FreeLibrary(hImageHlp);
|
||||
return;
|
||||
}
|
||||
|
||||
file_size_orig = get_file_size();
|
||||
|
||||
pImageAddCertificate = (void *) GetProcAddress(hImageHlp, "ImageAddCertificate");
|
||||
pImageEnumerateCertificates = (void *) GetProcAddress(hImageHlp, "ImageEnumerateCertificates");
|
||||
pImageGetCertificateData = (void *) GetProcAddress(hImageHlp, "ImageGetCertificateData");
|
||||
pImageGetCertificateHeader = (void *) GetProcAddress(hImageHlp, "ImageGetCertificateHeader");
|
||||
pImageRemoveCertificate = (void *) GetProcAddress(hImageHlp, "ImageRemoveCertificate");
|
||||
pCheckSumMappedFile = (void *) GetProcAddress(hImageHlp, "CheckSumMappedFile");
|
||||
|
||||
hPsapi = LoadLibraryA("psapi.dll");
|
||||
if (hPsapi)
|
||||
pGetModuleInformation = (void *) GetProcAddress(hPsapi, "GetModuleInformation");
|
||||
|
||||
hNtdll = LoadLibraryA("ntdll.dll");
|
||||
if (hNtdll)
|
||||
pRtlImageNtHeader = (void *) GetProcAddress(hNtdll, "RtlImageNtHeader");
|
||||
|
@ -450,8 +408,6 @@ START_TEST(integrity)
|
|||
|
||||
test_pe_checksum();
|
||||
|
||||
if (hPsapi) FreeLibrary(hPsapi);
|
||||
if (hNtdll) FreeLibrary(hNtdll);
|
||||
FreeLibrary(hImageHlp);
|
||||
DeleteFileA(test_dll_path);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Copyright 2021 Zebediah Figura
|
||||
*
|
||||
* 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 should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include <oaidl.h>
|
||||
#include <commdlg.h>
|
||||
#include <shlwapi.h>
|
||||
|
||||
extern DWORD WINAPI StrCmpCA(const char *, const char *);
|
||||
|
||||
void export(void)
|
||||
{
|
||||
SysAllocString(NULL);
|
||||
GetOpenFileNameA(NULL);
|
||||
SHRegGetIntW(NULL, NULL, 0);
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
@ cdecl export()
|
||||
@ stdcall VariantInit(ptr) oleaut32.VariantInit
|
|
@ -25,6 +25,7 @@
|
|||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "winsock2.h"
|
||||
#include "snmp.h"
|
||||
#include "iphlpapi.h"
|
||||
#include "wine/debug.h"
|
||||
|
@ -1217,7 +1218,7 @@ static void oidToUdpRow(AsnObjectIdentifier *oid, void *dst)
|
|||
|
||||
assert(oid && oid->idLength >= 5);
|
||||
row->dwLocalAddr = oidToIpAddr(oid);
|
||||
row->dwLocalPort = oid->ids[4];
|
||||
row->dwLocalPort = htons(oid->ids[4]);
|
||||
}
|
||||
|
||||
static int __cdecl compareUdpRow(const void *a, const void *b)
|
||||
|
@ -1225,9 +1226,9 @@ static int __cdecl compareUdpRow(const void *a, const void *b)
|
|||
const MIB_UDPROW *key = a, *value = b;
|
||||
int ret;
|
||||
|
||||
ret = key->dwLocalAddr - value->dwLocalAddr;
|
||||
ret = ntohl(key->dwLocalAddr) - ntohl(value->dwLocalAddr);
|
||||
if (ret == 0)
|
||||
ret = key->dwLocalPort - value->dwLocalPort;
|
||||
ret = ntohs(key->dwLocalPort) - ntohs(value->dwLocalPort);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1269,8 +1270,9 @@ static BOOL mib2UdpEntryQuery(BYTE bPduType, SnmpVarBind *pVarBind,
|
|||
udpTable->table[tableIndex - 1].dwLocalAddr);
|
||||
if (ret)
|
||||
{
|
||||
UINT id = ntohs(udpTable->table[tableIndex - 1].dwLocalPort);
|
||||
oid.idLength = 1;
|
||||
oid.ids = &udpTable->table[tableIndex - 1].dwLocalPort;
|
||||
oid.ids = &id;
|
||||
ret = SnmpUtilOidAppend(&pVarBind->name, &oid);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,8 +35,8 @@
|
|||
#endif
|
||||
|
||||
#ifdef JSVAL_DOUBLE_LAYOUT_PTR32
|
||||
/* NaN exponent and our 0x80000 marker */
|
||||
#define JSV_VAL(x) (0x7ff80000|x)
|
||||
/* NaN exponent, quiet bit 0x80000 and our 0x10000 marker */
|
||||
#define JSV_VAL(x) (0x7ff90000|x)
|
||||
#else
|
||||
#define JSV_VAL(x) x
|
||||
#endif
|
||||
|
@ -150,10 +150,10 @@ static inline jsval_t jsval_number(double n)
|
|||
if((ret.u.s.tag & 0x7ff00000) == 0x7ff00000) {
|
||||
/* isinf */
|
||||
if(ret.u.s.tag & 0xfffff) {
|
||||
ret.u.s.tag = 0x7ff00000;
|
||||
ret.u.s.tag = 0x7ff80000;
|
||||
ret.u.s.u.as_uintptr = ~0;
|
||||
}else if(ret.u.s.u.as_uintptr) {
|
||||
ret.u.s.tag = 0x7ff00000;
|
||||
ret.u.s.tag = 0x7ff80000;
|
||||
}
|
||||
}
|
||||
#else
|
||||
|
@ -191,7 +191,7 @@ static inline BOOL is_string(jsval_t v)
|
|||
static inline BOOL is_number(jsval_t v)
|
||||
{
|
||||
#ifdef JSVAL_DOUBLE_LAYOUT_PTR32
|
||||
return (v.u.s.tag & 0x7ff80000) != 0x7ff80000;
|
||||
return (v.u.s.tag & 0x7ff10000) != 0x7ff10000;
|
||||
#else
|
||||
return v.type == JSV_NUMBER;
|
||||
#endif
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue