Add a dummy track parser, that reads through MIDI tracks and events. To make sure we understand the file structure correctly, no actual tracks or events are generated.
Also add test cases to make sure we read through a MIDI file correctly.
This is skeleton of the actual MIDI parser. Pending on the merge of !4982
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5081
On Tue Feb 13 16:54:26 2024 +0000, Rémi Bernon wrote:
> Like we discussed I now think this should be implemented more like
> native. As far as I can tell it uses the existing track classes and
> parses MIDI files into them, dispatching the events on each track and
> creating new tracks if needed depending on the event types.
> This could actually make the implementation simpler as many track
> classes are already partially implemented, so it'd just be a matter of
> filling them with the parsed MIDI events.
@rbernon i understand, and i already agreed with you. this MR has been cut back to only include parsing of MIDI file headers
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4982#note_61132
This implements most of `D3DKMTEnumAdapters2` function, which is [indirectly used by all games using NVIDIA Streamline SDK](https://github.com/NVIDIAGameWorks/Streamline/blob/7ac42e47c7dd55b5b6d…. Having it (and [one another D3DKMT function](https://github.com/NVIDIAGameWorks/Streamline/blob/7ac42e47c7dd55… but one thing at a time) working is a requirement to enable some interesting features like DLFG (also known as DLSS-G / DLSS Frame Generation). Although currently not supported by NVIDIA on Unix systems, the lack of these functions also prevents [some game modifications that hijack DLSS-G](https://github.com/Nukem9/dlssg-to-fsr3) from working altogether because the adapter check still has to be performed.
The way I chose to tackle this was adding a new GDI driver function which winex11 then implements. This mirrors how `D3DKMTOpenAdapterFromLuid` is implemented, but a not-so-short conversation I had with Paul Gofman made me realize that there could be a better way to do this by tapping into win32u's adapter cache. More on that closer to the end, first I'll explain my initial idea.
The handle assignment is quite tricky; because this is done in win32u, we need to prepare as many handles as the number of elements in the array we were passed. However, this array can be much larger than the actual number of GPUs in the system (Windows 10 machine I ran some tests on always responded with 32 `NumAdapters` when given `NULL` in `pAdapters` even though there were just 2 adapters available). I chose to resolve this by allocating that many handles, then calling GDI driver function while still holding the mutex, then freeing unused handles from the end of the list. Some possible alternatives would be:
* Not holding the mutex while calling GDI driver function. We would still allocate more handles than needed but other functions would not be blocked while winex11 is doing its thing. We would then acquire the mutex again to free unused handles, which would require us to search for them first because it would no longer be guaranteed that they are at the end of the list.
* Calling the GDI driver function more than once, the first time to actually enumerate GPUs and the second time to give their handles GDI driver to save them, which would complicate the API contract between win32u and GDI driver quite a bit.
* Pass an additional parameter to let GDI driver allocate handles itself. It could be something as simple as pointer to the next handle variable, or something as complicated as an allocator function than can do anything win32 needs it to do (plus maybe a deallocator function to handle errors). But I suppose it would still require the mutex to be held for the entire call.
* … or something else I didn't think of.
There are two more members returned in each adapter info struct, `NumOfSources` and `bPrecisePresentRegionsPreferred`. I'm not exactly sure how am I supposed to handle them so for now they will always be left zeroed. VidPN and related stuff are just too arcane for me, sorry 😅
However, Paul suggested that I don't actually need to add a new GDI driver function to implement this. If I considered win32u's adapter list as maintained in `sysparams.c` to be the source of truth here, I could avoid calling into GDI driver and just perform the enumeration within win32u. But with how other D3DKMT functions are currently implemented, this will almost surely cause issues when interacting with some of them; e.g. handles returned by `EnumAdapters2` wouldn't be usable with `D3DKMTQueryVideoMemoryInfo` because that function _does_ forward most of the heavy lifting to be done by the GDI driver and winex11 would be unaware of what the given handle represents, hence unable to query appropriate `VkPhysicalDevice`.
(In the short term this could probably be avoided by calling `D3DKMTOpenAdapterFromLuid` for each enumerated LUID but this in turn relies on adapters actually having valid LUIDs assigned. On my current machine, Intel/Nvidia dual GPU laptop running Plasma Wayland, mainline Wine without some patches pulled from Proton seems to have… issues doing this properly…)
On the other hand, if everything in D3DKMT family of functions already went through win32u caches, this would have been much simpler. _Probably._ But because it does not, I feel like I should ask: why was it done like that? If there was a specific reason for avoiding win32u caches, what would be the correct way of implementing `EnumAdapters2` then? Following the way of `OpenAdapterFromLuid` and mapping UUIDs to LUIDs manually via the registry (my first/existing version, which also makes this fully reliant on Vulkan) or rewriting all this to go through win32u adapter cache? If the latter, then shouldn't existing D3DKMT functions perhaps be rewritten to use the cache as well and avoid calling GDI driver/Vulkan?
I'm open to suggestions so please let me know if you have any.
(I'm aware Wine is currently in code freeze, but I wanted to send this to gather some early feedback, I'm fine with waiting a few weeks before this becomes eligible for merging.)
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4791
for details see https://bugs.winehq.org/show_bug.cgi?id=56065
This change adds an implementation of Win32 API function GetAnycastIpAddressTable() that is used by Adoptium OpenJDK 21 and later to initialize Secure Random Generator. This implementation does not return real information, it just says "no entries found".
--
v13: iphlpapi: Add stub for GetAnycastIpAddressTable().
https://gitlab.winehq.org/wine/wine/-/merge_requests/4940
An alternative approach to `EnumAdapters2` that does not directly call to GDI driver and therefore does not require GDI driver functions to be expanded. The implementation now lives in `sysparams.c` to make it closer to win32u caches it accesses. It still uses `OpenAdapterFromLuid` internally because that's where adapter handles are actually assigned and to make sure returned handles are usable with other functions that rely on GDI driver being aware of what the handle represents to be able to function correctly (like `QueryVideoMemoryInfo`).
See !4791 for some background and why this version might be preferable over the one submitted there.
--
v8: win32u: Implement NtGdiDdDDIEnumAdapters2.
win32u: Maintain a list of GPUs in cache.
gdi32: Add D3DKMTEnumAdapters2() stub.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4857
--
v5: vkd3d: Support aliased tile binding if available.
vkd3d: Implement ID3D12CommandQueue::UpdateTileMappings() for textures.
vkd3d: Implement ID3D12CommandQueue::UpdateTileMappings() for buffers.
vkd3d: Pre-bind sparse texture mip tails.
tests/d3d12: Add a test for freeing underlying memory of a reserved resource.
tests/d3d12: Add tests for UpdateTileMappings().
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/631
--
v3: vkd3d-shader/dxil: Set the correct swizzle and mask in sm6_parser_emit_dx_calculate_lod().
This merge request has too many patches to be relayed via email.
Please visit the URL below to see the contents of the merge request.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/648
--
v2: tests/shader-runner: Add a clip distance array test.
vkd3d-shader/ir: Transform clip/cull inputs/outputs for DXIL shaders also.
tests/d3d12: Test multiple clip distance inputs in test_clip_distance().
tests/d3d12: Use five clip distances for the multiple test in test_clip_distance().
vkd3d-shader/ir: Transform clip/cull outputs and patch constants into arrays.
vkd3d-shader/ir: Transform clip/cull inputs into an array.
vkd3d: Implement GetCopyableFootprints1().
vkd3d: Implement CreatePlacedResource1().
vkd3d: Implement CreateCommittedResource2().
vkd3d: Implement GetResourceAllocationInfo2().
tests/d3d12: Add tests for GetCopyableFootprints1().
tests/d3d12: Add tests for CreatePlacedResource1().
tests/d3d12: Add tests for CreateCommittedResource2().
tests/d3d12: Add tests for GetResourceAllocationInfo2().
vkd3d: Add ID3D12Device8 interface stubs.
vkd3d: Implement ID3D12Resource2.
tests/d3d12: Add a test for zero description count in test_resource_allocation_info().
vkd3d: Return DXGI_ERROR_NOT_FOUND from GetProtectedResourceSession().
tests/d3d12: Add tests for GetProtectedResourceSession().
vkd3d: Add ID3D12CommandList6 interface stubs.
vkd3d: Replace the descriptor object cache with a thread-local implementation.
vkd3d-shader/spirv: Apply the sequentially consistent ordering flag to atomic instructions.
vkd3d-shader/spirv: Handle in-bounds register indices.
vkd3d-shader/spirv: Trace instead of warn for alignment of indexable temps.
vkd3d-shader/spirv: Emit aligned register copies.
vkd3d-shader/spirv: Emit aligned register loads.
vkd3d-shader/dxil: Use a bool for tracking loop merge targets.
vkd3d-shader/dxil: Use a bool for tracking reachability.
vkd3d-shader/dxil: Use node visit flag in cfg_structuriser_insert_phi().
vkd3d-shader/dxil: Use node visit flag in cfg_structuriser_find_break_target_for_selection_construct().
vkd3d-shader/dxil: Use node visit flag in cfg_structuriser_traverse_dominated_blocks_and_rewrite_branch().
vkd3d-shader/dxil: Use node visit flag in cfg_structuriser_can_backtrace_to().
vkd3d-shader/dxil: Use node visit flag in sm6_block_post_dominates_any_work().
vkd3d-shader/dxil: Use node visit flag in sm6_block_reaches_backward_visited_node().
vkd3d-shader/dxil: Use node visit flag in the loop tracer.
vkd3d-shader/dxil: Use node visit flag in sm6_block_dominates_all_reachable_exits().
vkd3d-shader/dxil: Introduce helpers for allocating flags to track node visits.
vkd3d-shader/spirv: Emit interpolation mode for outputs.
vkd3d-shader/dxil: Fix eliminate_node_links_preds_to_succ for multiple uses of inner PHI.
vkd3d-shader/dxil: Don't add fake_succ if we already have a normal succ.
vkd3d-shader/dxil: Invent a ladder block if we have to in loops.
vkd3d-shader/dxil: Refactor ladder creation in find_loops.
vkd3d-shader/dxil: Never duplicate back-edges.
vkd3d-shader/dxil: Reconsider continue breaks if they can reach more normal break nodes.
vkd3d-shader/dxil: Handle breaking return constructs better.
vkd3d-shader/dxil: Consider switch blocks that branch to continue block.
vkd3d-shader/dxil: Consider duplicate branches when eliminating degenerates.
vkd3d-shader/dxil: Handle scenario where switch breaks out unexpectedly.
vkd3d-shader/dxil: Reduce switch merge scope when appropriate.
vkd3d-shader/dxil: Refactor traverse_dominated_blocks to always filter multi-access.
vkd3d-shader/dxil: Try harder to tie-break merge fixups with early return.
vkd3d-shader/dxil: Don't consider vestigal breaks to be break candidates.
vkd3d-shader/dxil: Fix backwards traversal of nested loops that are not reachable.
vkd3d-shader/dxil: Rewrite multiple back edges if needed.
vkd3d-shader/dxil: Consider that split merge blocks can be hidden in pred blocks.
vkd3d-shader/dxil: Fix CFG validation error after last SPIRV-Tools.
vkd3d-shader/dxil: Consider more scenarios where we need to introduce dummy case labels.
vkd3d-shader/dxil: Consider multiple impossible switch merge candidates.
vkd3d-shader/dxil: Fix a scenario where we need loop merge rather than selection merge.
vkd3d-shader/dxil: Fix bug in find_common_post_dominator_with_ignored_break.
vkd3d-shader/dxil: Avoid catastrophic cancellation of PHI nodes when merging PHI nodes.
vkd3d-shader/dxil: Fix compiler warnings.
vkd3d-shader/dxil: Emit non-sysval bool inputs/outputs as uint.
vkd3d-shader/dxil: Emit register minimum precision.
vkd3d-shader/spirv: Emit minimum precision decoration.
vkd3d: Use FIXME_ONCE in d3d12_command_list_WriteBufferImmediate().
vkd3d-shader/dxil: Implement DX instruction CBufferLoad.
vkd3d-shader/spirv: Support scalar constant buffer load.
tests/shader_runner: Test wave ops.
vkd3d-shader/dxil: Implement DX instruction WaveActiveAllEqual.
vkd3d-shader/spirv: Introduce a WAVE_ACTIVE_ALL_EQUAL instruction.
vkd3d-shader/spirv: Enable capability GroupNonUniform for wave inputs.
vkd3d-shader/dxil: Implement DX instruction WaveActiveBallot.
vkd3d-shader/spirv: Introduce a WAVE_ACTIVE_BALLOT instruction.
vkd3d-shader/main: Deduplicate dumped shaders.
vkd3d-shader/dxil: Implement DX instruction WaveQuadOp.
vkd3d-shader/dxil: Implement DX instructions WaveAllTrue and WaveAnyTrue.
vkd3d-shader/dxil: Implement DX instruction WaveGetLaneCount.
vkd3d-shader/spirv: Introduce WAVE_QUAD_OP_D/H/V instructions.
vkd3d-shader/spirv: Introduce WAVE_ALL_TRUE and WAVE_ANY_TRUE instructions.
vkd3d-shader/spirv: Introduce a WAVELANECOUNT register.
vkd3d: Use FIXME_ONCE for BeginEvent() and EndEvent().
tests: Introduce test compilation with dxc.
tests/d3d12: Introduce DXC compiled shader buffers and a dxc_compiler header.
vkd3d: Report highest shader model as 6.0.
vkd3d-shader/spirv: Do not warn if unhandled global flags are zero.
vkd3d-shader/spirv: Silence more global flag fixmes.
vkd3d-shader/dxil: Implement DX instruction WaveReadLaneAt.
vkd3d-shader/dxil: Implement DX instruction WaveIsFirstLane.
vkd3d-shader/dxil: Implement DX instruction WaveGetLaneIndex.
vkd3d-shader/dxil: Implement DX instruction WaveActiveBit.
vkd3d-shader/dxil: Implement DX instruction WaveActiveOp.
vkd3d-shader/dxil: Implement DX instructions WaveAllBitCount, WavePrefixBitCount and WaveReadLaneFirst.
vkd3d-shader/spirv: Introduce a WAVELANEINDEX register type.
vkd3d-shader/spirv: Introduce a WAVE_READ_LANE_AT instruction.
vkd3d-shader/spirv: Introduce a WAVE_IS_FIRST_LANE instruction.
vkd3d-shader/spirv: Introduce WAVE_ACTIVE_BIT_* and WAVE_ACTIVE_OP_* instructions.
vkd3d-shader/spirv: Introduce a WAVE_READ_LANE_FIRST instruction.
vkd3d-shader/spirv: Introduce WAVE_ALL_BIT_COUNT and WAVE_PREFIX_BIT_COUNT instructions.
vkd3d: Initialise wave ops feature options.
vkd3d-shader: Introduce a wave ops feature flag.
vkd3d: Use Vulkan 1.1 and SPIR-V 1.3.
vkd3d-shader/dxil: Implement DX instruction OutputControlPointID.
vkd3d-shader/dxil: Implement DX instruction DomainLocation.
vkd3d-shader/dxil: Implement DX instruction StorePatchConstant.
vkd3d-shader/dxil: Implement DX instructions LoadOutputControlPoint and LoadPatchConstant.
vkd3d-shader/dxil: Support constexpr GEP.
vkd3d-shader/dxil: Support patch constant functions and signatures.
vkd3d-shader/dxil: Implement DX instruction Discard.
vkd3d-shader/dxil: Implement DX instructions EmitStream, CutStream and EmitThenCutStream.
vkd3d-shader/dxil: Implement DX instruction SampleIndex.
vkd3d-shader/dxil: Implement DX instructions EvalSampleIndex and EvalCentroid.
vkd3d-shader/dxil: Implement DX instruction PrimitiveID.
vkd3d-shader/dxil: Implement DX instructions ThreadId, GroupId, ThreadIdInGroup and FlattenedThreadIdInGroup.
vkd3d-shader/dxil: Implement DX instruction Coverage.
vkd3d-shader/dxil: Implement DX instruction RenderTargetGetSampleCount.
vkd3d-shader/dxil: Implement DX instructions Texture2DMSGetSamplePosition and RenderTargetGetSamplePosition.
vkd3d-shader/dxil: Implement DX intrinsic GetDimensions.
vkd3d-shader/dxil: Move the resource kind helper functions up.
vkd3d-shader/spirv: Introduce a sample info flag value for a scalar uint dst parameter.
vkd3d-shader/dxil: Implement DX instruction CalculateLOD.
vkd3d-shader/dxil: Implement DX instructions Dot2, Dot3 and Dot4.
vkd3d-shader/dxil: Implement DX instruction MakeDouble.
vkd3d-shader/dxil: Implement DX instruction Saturate.
vkd3d-shader/dxil: Implement DX instruction FAbs.
vkd3d-shader/dxil: Implement DX instructions FMa, FMad, IMad and UMad.
vkd3d-shader/spirv: Use source data type in spirv_compiler_emit_imad().
vkd3d-shader/spirv: Support VKD3DSI_PRECISE_XYZW for SINCOS.
vkd3d-shader/spirv: Support VKD3DSI_PRECISE_XYZW for GLSL extension instructions.
vkd3d-shader/dxil: Implement DX instruction BufferUpdateCounter.
vkd3d-shader/dxil: Implement DX Gather* instructions.
vkd3d-shader/dxil: Implement DX Sample* instructions.
vkd3d-shader/dxil: Read sampler descriptors.
vkd3d-shader/dxil: Implement DX instruction Barrier.
vkd3d-shader/dxil: Implement DX instructions AtomicBinOp and AtomicCompareExchange.
vkd3d-shader/dxil: Implement DX intrinsic RawBufferStore.
vkd3d-shader/dxil: Handle raw and structured buffers in sm6_parser_emit_dx_buffer_store().
vkd3d-shader/dxil: Implement DX intrinsic BufferStore.
tests/shader-runner: Add a test for a signed int structured buffer UAV.
tests/shader-runner: Add a test for a signed int typed buffer UAV.
tests/shader-runner: Support structured buffer UAVs.
vkd3d-shader/spirv: Do not assert data type is uint in spirv_compiler_emit_store_uav_raw_structured().
vkd3d-shader/dxil: Support I/O registers.
vkd3d-shader/dxil: Load hull shader properties.
vkd3d-shader/dxil: Load domain shader properties.
vkd3d-shader/dxil: Load geometry shader properties.
vkd3d-shader/dxil: Implement a CFG structuriser.
vkd3d-shader/dxil: Implement the DXIL CMPXCHG instruction.
vkd3d-shader/dxil: Implement the DXIL ATOMICRMW instruction.
This merge request has too many patches to be relayed via email.
Please visit the URL below to see the contents of the merge request.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/648
On Tue Feb 13 16:54:26 2024 +0000, Yuxuan Shui wrote:
> @rbernon is there anything left i need to do to get this merged?
Like we discussed I now think this should be implemented more like native. As far as I can tell it uses the existing track classes and parses MIDI files into them, dispatching the events on each track and creating new tracks if needed depending on the event types.
This could actually make the implementation simpler as many track classes are already partially implemented, so it'd just be a matter of filling them with the parsed MIDI events.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4982#note_61016
It can be substantially faster in some cases. Notepad++ (with several plugins) start up goes down from around ~1.03 sec to ~0.61 sec on my machine (with wineprefix active).
9b7669592d6f8b40976b571b70f8543777d35167 is what introduced this performance regression. I don't know why exactly, but it made my Notepad++ noticeably slower when launched from a file manager (so it's not just at wineprefix startup overhead), which is very annoying.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5070
There are still some issues I need to fix, mainly around timing conversion between MIDI and dmusic. Right now MIDI files seem to be cut off before the end is reached.
Please have a look at the general approach in the meantime, I need to know if this is the right way to do this or not.
--
v27:
https://gitlab.winehq.org/wine/wine/-/merge_requests/4982
--
v4: vkd3d: Support aliased tile binding if available.
vkd3d: Implement ID3D12CommandQueue::UpdateTileMappings() for textures.
vkd3d: Implement ID3D12CommandQueue::UpdateTileMappings() for buffers.
vkd3d: Pre-bind sparse texture mip tails.
tests/d3d12: Add a test for freeing underlying memory of a reserved resource.
tests/d3d12: Add tests for UpdateTileMappings().
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/631
This only matches with digitizer devices for now, and its purpose is mainly to make testing possible with the virtual device on Wine, but could be ultimately useful for hidraw pointing devices, assuming we would support that in winebus / wineusb.
Later, it could also be extended to support mouse devices, but for now we use a different path with user drivers sending the hardware messages instead. Using a NT device for that has a lot of performance implications that will need to be resolved first, and it's unlikely the best way to do that. On the backend side, accessing the raw mouse devices usually requires privileges anyway.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5075
On Mon Feb 12 00:49:11 2024 +0000, Conor McCarthy wrote:
> The SM6 implementation is now upstream, so these todos are unnecessary
> (and were removed in an upstream commit).
You'd rather need to remove the `todo(sm<6)` annotations that Conor left behind, once (with your patches) that feature is available in the HLSL compiler.
--
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/364#note_60986
On Sun Feb 11 16:37:35 2024 +0000, Petrichor Park wrote:
> What would make `vkd3d_string_buffer_printf` better? It looks like
> `hlsl_sprintf_alloc` just forwards to that inside and I don't see what I
> would be writing that would be better.
Because you can call `vkd3d_string_buffer_printf()` repeatedly on the same buffer, so you don't need a final `hlsl_sprintf_alloc()` just to stitch the two strings together.
--
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/364#note_60985
This is the first part of !608, which I decided to separate to ease review.
It consists of improvements to SM1 testing, mainly:
- Correctly passing int and bool uniforms as IEEE 754 floats to SM1 profiles.
- The introduction of the "only" qualifier to avoid abusing `[require]` blocks in case tests retrieve different results for different shader models.
- Allowing some of the tests we already have for SM4/SM6 to run in SM1 after those improvements.
--
v7: tests: Remove [require] directives for tests that use int and bool uniforms.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/616
On Tue Feb 13 04:42:21 2024 +0000, Mohamad Al-Jaf wrote:
> I don't see how this is different from previous MRs that didn't help
> with any application, but were approved anyway like the windows.ui
> IUISettings and InputPane stub interfaces. At least in this case there's
> a possibility it would help.
Well, I'm approving because some application calls it and possibly fails because of it, but in general we prefer to only implement things that applications actually need.
Things that are called but not causing any issues can be left unimplemented, there are plenty of useless features in Windows and we don't necessarily want to implement them until they are actually needed.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5021#note_60970
On Tue Feb 6 14:11:59 2024 +0000, Mohamad Al-Jaf wrote:
> FWIW this class is required for a cloud feature
> >With the System Ticket feature, an app can provide cloud services to a
> user and store user info even if the user is not signed on with their
> Microsoft account (MSA). The app can acquire information about the local
> user account on a system, as well as information about the system itself,
> in order to keep track of settings and data for this user.
> https://learn.microsoft.com/en-us/uwp/api/windows.security.authentication.o…
> Regarding office, it requires numerous workarounds so it's time consuming
> to test. Adding this class for Minecraft Education Edition didn't break
> anything. I think Affinity Photo may have used it as well and it too worked
> without issue.
I don't see how this is different from previous MRs that didn't help with any application, but were approved anyway like the windows.ui IUISettings and InputPane stub interfaces. At least in this case there's a possibility it would help.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5021#note_60968
--
v3: vkd3d: Support aliased tile binding if available.
vkd3d: Implement ID3D12CommandQueue::UpdateTileMappings() for textures.
vkd3d: Implement ID3D12CommandQueue::UpdateTileMappings() for buffers.
vkd3d: Pre-bind sparse texture mip tails.
tests/d3d12: Add a test for freeing underlying memory of a reserved resource.
tests/d3d12: Add tests for UpdateTileMappings().
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/631
This allows to declare SRV buffers in the shader tests using `[buffer srv n]` blocks, and passing them to the different backends.
Also, 1/2 includes a missing bit required to parse `Buffer<>` types in the HLSL compiler.
This is a step towards supporting StructuredBuffer types in further patches.
--
v7: vkd3d-shader/hlsl: Parse Buffer types.
tests/shader-runner: Change probe directive syntax on shader_test files.
tests/shader-runner: Change resource declaration syntax on shader_test files.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/569
On Tue Feb 13 00:30:57 2024 +0000, Fabian Maurer wrote:
> changed this line in [version 4 of the diff](/wine/wine/-/merge_requests/5064/diffs?diff_id=99247&start_sha=0189eb79f8110a1171a1974a651ca1ef0ae40afb#a3eabccd5496fd63ed6cbf28e676e5cb5c58689e_3981_4004)
Sure, updated.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5064#note_60959
Normally I am a strong proponent of adjusting implementations one small step at
a time, but this is a bit of an extreme case.
The current state of UrlCanonicalize() is a prototypical example of "spaghetti
code": the implementation has been repeatedly adjusted to fix a new discovered
edge case, without properly testing the scope of the new logic, with the effect
that the current logic is a scattered mess of conditions that interact in
unpredictable ways.
To be fair, the actual function is much more complicated than one would
anticipate, and the number of new weird edge cases I found while trying to flesh
out existing logic was rather exhausting.
I initially tried to "fix" the existing implementation one step at a time. After
racking up dozens of commits without an end in sight, though, and having to
waste time carefully unravelling the broken code in the right order so as to
avoid temporary failures, I decided instead to just fix everything at once,
effectively rewriting the function from scratch, and this proved to be much more
productive.
Hopefully the huge swath of new tests is enough to prove that this new
implementation really is correct, and has no more spaghetti than what Microsoft
made necessary.
--
v5: shlwapi/tests: Add many more tests for UrlCanonicalize().
kernelbase: Use scheme_is_opaque() in UrlIs().
kernelbase: Reimplement UrlCanonicalize().
https://gitlab.winehq.org/wine/wine/-/merge_requests/4954
copy implementation of CopyFileExW into CopyFile2,
then implement CopyFileExW in terms of CopyFile2
should fix https://bugs.winehq.org/show_bug.cgi?id=55897, as Python does not use any new functionality nor the callback parameter from CopyFile2.
I have not written extensive documentation since the original function didn't seem to have any; I can do that if recommended.
I originally intended to implement the callback functionality in this MR as well, but realized that would be better as a follow-up.
--
v8: implement CopyFile2
https://gitlab.winehq.org/wine/wine/-/merge_requests/5020
This is a preparation for supporting more xstate features in the contexts.
The remaining parts are:
- support arbitrary xstate in usr1_handler();
- support arbitrary xstate in the server contexts (probably transferring only the present part);
- support arbitrary xstate in context manipulation functions;
- enabling more xstates in system.c and in user shared data.
--
v2: ntdll: Don't hardcode xstate size in exception stack layout.
ntdll: Don't hardcode xstate size in syscall frame.
ntdll: Don't hardcode xstate feature mask.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4987
This allows to declare SRV buffers in the shader tests using `[buffer srv n]` blocks, and passing them to the different backends.
Also, 1/2 includes a missing bit required to parse `Buffer<>` types in the HLSL compiler.
This is a step towards supporting StructuredBuffer types in further patches.
--
v6: vkd3d-shader/hlsl: Parse Buffer types.
tests/shader-runner: Change probe directive syntax on shader_test files.
tests/shader-runner: Change resource declaration syntax on shader_test files.
tests/shader-runner: Support SRV buffers.
tests/shader-runner: Separate resource_type into type and dimension.
vkd3d-shader/hlsl: Use positive logic on add_*_method_call() functions.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/569
This is the first part of !608, which I decided to separate to ease review.
It consists of improvements to SM1 testing, mainly:
- Correctly passing int and bool uniforms as IEEE 754 floats to SM1 profiles.
- The introduction of the "only" qualifier to avoid abusing `[require]` blocks in case tests retrieve different results for different shader models.
- Allowing some of the tests we already have for SM4/SM6 to run in SM1 after those improvements.
--
v6: tests: Remove [require] directives for tests that use int and bool uniforms.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/616
My intention is to make InitializeCriticalSection[Ex] behaviour compatible with modern Windows which doesn't allocate debug info without RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO flag. Before this can be done it requires fixing all the Wine modules currently relying on the old behaviour. That will also make some of those Wine modules (e. g., winhttp) work on modern Windows instead of crashing on debug info access. Besides the latter, the motivation under the planned change is spare heap alloc / free during InitializeCriticalSection / DeleteCriticalSection by default as some games do quite a lot of those. Also avoiding it helps Witch on the Holy Night to survive use after free like it does on Windows.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5071
This is the first part of !608, which I decided to separate to ease review.
It consists of improvements to SM1 testing, mainly:
- Correctly passing int and bool uniforms as IEEE 754 floats to SM1 profiles.
- The introduction of the "only" qualifier to avoid abusing `[require]` blocks in case tests retrieve different results for different shader models.
- Allowing some of the tests we already have for SM4/SM6 to run in SM1 after those improvements.
--
v5: tests: Remove [require] directives for tests that use int and bool uniforms.
tests/shader-runner: Introduce "if" qualifier.
tests: Don't ignore SM1 on a non-const-indexing.shader_test test.
tests/vkd3d-shader: Set uninitialized uniforms to a value.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/616
The supplied async handle passed to set_async_direct_result() cannot be NULL.
Fixes: 6b16ead607e (ntdll: The async handle passed to set_async_direct_result() cannot be NULL., 2022-09-16)
--
v2: ntdll: Remove stale comment from set_async_direct_result() documentation.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5063
This serie is the last one for CreateProcess fixes regarding handles inheritance.
It covers the cases of errenous (null, invalid...) handles.
--
v2: kernel32/tests: Remove todo scaffholding for CreateProcess() tests.
msvcrt: Don't reset invalid std handle in init.
msvcrt/tests: Extend test for invalid std handle on msvcrt init.
kernelbase: Don't use INVALID_HANDLE_VALUE as std handle in CreateProcess.
kernel32/tests: Add tests for CreateProcess with invalid handles.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5049
This is the first part of !608, which I decided to separate to ease review.
It consists of improvements to SM1 testing, mainly:
- Correctly passing int and bool uniforms as IEEE 754 floats to SM1 profiles.
- The introduction of the "only" qualifier to avoid abusing `[require]` blocks in case tests retrieve different results for different shader models.
- Allowing some of the tests we already have for SM4/SM6 to run in SM1 after those improvements.
--
v4: tests: Remove [require] directives for tests that use int and bool uniforms.
tests/shader-runner: Introduce "if" qualifier.
tests: Don't ignore SM1 on a non-const-indexing.shader_test test.
tests/vkd3d-shader: Set uninitialized uniforms to zero.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/616
First part of Proton shared memory series. The full branch can be seen at https://gitlab.winehq.org/rbernon/wine/-/commits/mr/shared-memories.
--
v17: user32: Use the desktop shared data for GetCursorPos().
include: Add ReadNoFence64 inline helpers.
server: Expose the desktop shared mapping to clients.
server: Add a sequence number to the shared data.
server: Move the cursor position and last change time to the shared data.
server: Create a desktop shared mapping.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3103
This is in preparation for receiving XI2 touch events. The version change is necessary as the events aren't sent at all otherwise.
--
v2: winex11: Simplify XInput2 device valuator lookup.
winex11: Always listen to XInput2 device changes events.
winex11: Initialize XInput2 extension on every thread.
winex11: Advertise XInput2 version 2.2 support.
winex11: Process XInput2 events with QS_INPUT filter.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5067
The PE build uses FlsAlloc(), which for our purposes makes no difference vs TlsAlloc(), and allows the use of a destruction callback.
--
v10: vkd3d: Replace the descriptor object cache with a thread-local implementation.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/384
The PE build uses FlsAlloc(), which for our purposes makes no difference vs TlsAlloc(), and allows the use of a destruction callback.
--
v9: vkd3d: Replace the descriptor object cache with a thread-local implementation.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/384
On Mon Feb 12 00:49:11 2024 +0000, Petrichor Park wrote:
> Not sure how I should be editing this wrt !602. Should I be re-adding
> all the `todo(sm>=6)` stuff? In my local changes I've completely
> deferred to that MR and don't edit the tests file anymore.
The SM6 implementation is now upstream, so these todos are unnecessary (and were removed in an upstream commit).
--
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/364#note_60828
copy implementation of CopyFileExW into CopyFile2,
then implement CopyFileExW in terms of CopyFile2
should fix https://bugs.winehq.org/show_bug.cgi?id=55897, as Python does not use any new functionality nor the callback parameter from CopyFile2.
- followed [the Wiki](https://wiki.winehq.org/Developer_Hints#Implementing_new_API_calls) for adding a new API call
- run `file.c` tests and they seem to pass
I have not written extensive documentation since the original function didn't seem to have any; I can do that if recommended.
I originally intended to implement the callback functionality in this MR as well, but realized that would be better as a follow-up.
--
v7: create CopyFile2_impl and CopyFile2
https://gitlab.winehq.org/wine/wine/-/merge_requests/5020
Strings are opaque objects in HLSL. This implements recognizing string
literals and the `string` type.
This should fix the bug marked below but I'm not sure how to get my
hands on a copy of Lego Star Wars Saga to test it properly.
This is a super-duper draft MR; I'm certain there's problems with it.
I do at least have a passing test, though.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50382
--
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/305