This applies on top of !662, the last four commits belong here.
Here we compute a topological order (plus some additional properties) of the shader blocks. Eventually the blocks will be emitted precisely in this order, after having been enriched with structured control flow information.
--
v6: vkd3d-shader/ir: Keep loops contiguous in the topological sort.
vkd3d-shader/ir: Dump the topological order of the control flow graph.
vkd3d-shader/ir: Topologically sort the control flow graph.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/672
On Wed Feb 28 11:16:57 2024 +0000, Stefan Dösinger wrote:
> Suggestion: Check if *device is indeed the IDirect3DRMDevice (QI
> IID_IDirect3DRMDevice from it and compare pointers). We have cases in
> plain ddraw where callbacks and getters return the interface passed in
> instead of what the header says and applications depend on it.
> IOW, if you register the callback with
> IDirect3DRMDevice3::AddUpdateCallback you may or may not get an
> IDirect3DRMDevice3 * here.
Interesting. Yeah, I may add some testing for that in another MR.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5161#note_62936
On Wed Feb 28 11:16:56 2024 +0000, Stefan Dösinger wrote:
> I am wondering if this breaks the tests
> (test_create_device_from_clipper1 checks the refcount), but the
> IDirectDrawSurface::SetClipper holds a reference itself. So we're
> probably fine with not holding a ref ourselves, especially if we don't
> use the clipper object anywhere.
FWIW, I ran the tests on a local box running XP bare-metal, and it seemed fine with this.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5161#note_62935
This applies on top of !662, the last four commits belong here.
Here we compute a topological order (plus some additional properties) of the shader blocks. Eventually the blocks will be emitted precisely in this order, after having been enriched with structured control flow information.
--
v5: vkd3d-shader/ir: Keep loops contiguous in the topological sort.
vkd3d-shader/ir: Dump the topological order of the control flow graph.
vkd3d-shader/ir: Topologically sort the control flow graph.
vkd3d-shader/ir: Allow adding to a block list without checking for duplicates.
vkd3d-shader/ir: Sort each loop by block label.
vkd3d-shader/ir: Dump the loops in the control flow graph.
vkd3d-shader/ir: Keep track of loops by header block.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/672
This MR ensures that document mode isn't updated on the wrong document when a DOMContentLoaded event occurs. This is done by always using the event target dispex (instead of the dispex associated with doc associated with the event listener).
This fixes the launcher for Swords of Legends Online.
--
v3: mshtml: Don't handle special case when doc != node->doc.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5156
On Wed Feb 28 11:17:59 2024 +0000, Stefan Dösinger wrote:
> There is room for future work, but nothing that needs to be in this
> patchset IMHO:
> 1) Check how multiple ForceUpdate / Clear calls influence the returned
> list of rectangles
> 2) Check which d3drmdevice interface is passed to the update callbacks
Ah I missed your remarks on the cover letter regarding point 1.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5161#note_62913
There is room for future work, but nothing that needs to be in this patchset IMHO:
1) Check how multiple ForceUpdate / Clear calls influence the returned list of rectangles
2) Check which d3drmdevice interface is passed to the update callbacks
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5161#note_62911
Stefan Dösinger (@stefan) commented about dlls/d3drm/tests/d3drm.c:
> + DWORD clip_list_size;
> + RGNDATA *clip_list;
> + HWND window;
> + HRESULT hr;
> +
> + window = create_window();
> +
> + /* Set up device */
> + hr = DirectDrawCreateClipper(0, &clipper, NULL);
> + ok(hr == DD_OK, "Cannot get IDirectDrawClipper interface, hr %#lx.\n", hr);
> + hr = IDirectDrawClipper_SetHWnd(clipper, 0, window);
> + ok(hr == DD_OK, "Cannot set HWnd to Clipper, hr %#lx.\n", hr);
> + hr = Direct3DRMCreate(&d3drm1);
> + ok(SUCCEEDED(hr), "Cannot create IDirect3DRM instance, hr %#lx.\n", hr);
> + hr = IDirect3DRM_CreateDeviceFromClipper(d3drm1, clipper, &driver, dev_width, dev_height, &device1);
> + ok(hr == D3DRM_OK, "Cannot create IDirect3DRMDevice interface, hr %#lx.\n", hr);
This is more a curiosity rather than something that needs to be addressed in this patch: Dies CreateDeviceFromClipper fail if the clipper has no window (but instead a cliplist or simply nothing)?
I would expect it to fail, but otoh SetCooperativeLevel on a NULL HWND works in DDSCL_NORMAL I think.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5161#note_62909