Repository navigation
No occlusion-query limit per frame
A frame no longer runs out of occlusion queries. Before, past about 500 queries in one frame, every further query that drew answered fully visible. Now each query answers its own count, however many a frame issues.
- The query buffer grows with the frame, and a frame that fills the device's largest buffer continues in another one (#1191)
- Only a failed allocation still answers fully visible, and it warns once in the log (#1191)
- Mirror's Edge issues more queries than the old limit: its log carried
visibility-query slot budget exhausted for this frameand it showed light halos through walls. Whether the halos are gone is not yet confirmed in the game (#1191)
sRGB write leaves float render targets linear
D3DRS_SRGBWRITEENABLE now encodes only the render targets whose format takes an sRGB write and writes every other target linear, as D3D9 does. A float render target beside an 8-bit one keeps the value the shader wrote, so the depth of field in Pro Evolution Soccer 2017's goal cut-scenes no longer blurs the whole frame.
- A8R8G8B8, X8R8G8B8, A8B8G8R8 and X8B8G8R8 are encoded, after the blender. R5G6B5, A1R5G5B5, G16R16, A16B16G16R16 and the float formats are written linear, also beside encoded targets in the same pass (#1185)
- A
Clearwith sRGB write on stores the colour encoded in an sRGB-capable target and linear in the others (#1185) CheckDeviceFormatwithD3DUSAGE_QUERY_SRGBWRITEanswers yes only for the four encoded render-target formats (#1185)- The reporter's patch fixed the PES 2017 cut-scenes in game. The merged build is not yet confirmed in PES 2017 (#1185)
Rendering fixes
- Fixed-function sphere-map texgen (
D3DTSS_TCI_SPHEREMAP) generates the coordinates D3D9 does, so an environment map samples the right part of its texture. Every generated coordinate was off before (#1187) - Linear table fog with
D3DRS_FOGSTARTequal toD3DRS_FOGENDleaves a depth below the end unfogged and fully fogs one at or above it. Before, the whole primitive took the fog colour (#1187) - Vertex fog with an equal start and end still fogs every vertex, as D3D9 does (#1187)
Behaviour changes
CreateDevice,CreateDeviceEx,CreateAdditionalSwapChain,ResetandResetExanswerD3DERR_INVALIDCALLfor a lockable back buffer that is also multisampled, as D3D9 does. A game that asks for one now fails there, as it does on Windows and on Wine's own d3d9 (#1184)- A plain device whose
Resetwas refused this way needs anotherReset. An extended device keeps its state (#1184) - Under
D3DRS_SRGBWRITEENABLE, render targets of any format other than the four 8-bit ones above are written linear, andD3DUSAGE_QUERY_SRGBWRITEanswers no for them (#1185)
Internals
bench-comparereports the counts of the sampled draw-snapshot timers asinfo, and a noisy perf count per frame fails only when it moves by more than five events per thousand frames as well as past its ratio threshold (#1181)- A unit test pins the mode list served on a 1470x956 desktop of a 2560x1664 panel, where League of Legends needs 1280x800, which v0.15.0 serves (#1188)
- The first-draw pipeline cache end-to-end test runs in a private copy of the test executable, so no other process shares its cache file (#1189)
- The conformance runner restarts the prefix's wineserver session after a subtest reports
Failed to restore display modes, which happens on a display below 60 Hz, so the subtests after it start from the display's own mode. The@mac2baseline is re-recorded for it (#1190) - Five
device.csites of Wine's d3d9 tests for the lockable multisampled back buffer, andvisual.c18390 and 29162 for table fog and sphere-map texgen, now pass and left the baseline (#1184, #1187) - New end-to-end tests cover occlusion queries that grow a buffer and spill across a pass break, sRGB write into an 8-bit and a float target together, sphere-map texgen coordinates, equal-range table fog and the lockable multisampled refusal at every entry point (#1184, #1185, #1187, #1191)
See INSTALL.md inside the archive for installation.
Full changelog: v0.15.0...v0.15.1