--
v2: win32u: Add support for sending and receiving WM_POINTER* messages.
server: Add support for sending and receiving WM_POINTER* messages.
mouhid.sys: Send WM_POINTER* messages on contact updates.
dinput/tests: Test the WM_POINTER* message parameter values.
win32u: Use a custom struct hid_input for NtUserSendHardwareInput.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5193
Since Yousician's last update, it was throwing an error when initialising audio output. Unfortunately I don't have access to the old version, but they seem to have dropped win<10 support, and are using only IAudioClient3_InitializeSharedAudioStream. They also use IDeviceTopology to get the type of the first output connector.
This is the bare minimum I needed to get it working.
--
v19: mmdevapi: add stub for IDeviceTopology
https://gitlab.winehq.org/wine/wine/-/merge_requests/3554
--
v26: vkd3d-shader: Force enable all extensions, features and Vulkan 1.1.
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
Since Yousician's last update, it was throwing an error when initialising audio output. Unfortunately I don't have access to the old version, but they seem to have dropped win<10 support, and are using only IAudioClient3_InitializeSharedAudioStream. They also use IDeviceTopology to get the type of the first output connector.
This is the bare minimum I needed to get it working.
--
v18: mmdevapi: add stub for IDeviceTopology
mmdevapi/tests: add test for IDeviceTopology
https://gitlab.winehq.org/wine/wine/-/merge_requests/3554
--
v25: vkd3d-shader: Force enable all extensions and features, and default to Vulkan 1.1.
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
Since Yousician's last update, it was throwing an error when initialising audio output. Unfortunately I don't have access to the old version, but they seem to have dropped win<10 support, and are using only IAudioClient3_InitializeSharedAudioStream. They also use IDeviceTopology to get the type of the first output connector.
This is the bare minimum I needed to get it working.
--
v17: mmdevapi/tests: add test for IDeviceTopology
mmdevapi: implement IAudioClient3_GetSharedModeEnginePeriod
mmdevapi: implement IAudioClient3_InitializeSharedAudioStream
https://gitlab.winehq.org/wine/wine/-/merge_requests/3554
--
v24: vkd3d-shader: Force enable all extensions, features and Vulkan 1.1.
vkd3d: Use long number format in vkd3d_tls_key_set_value().
vkd3d-shader/dxil: Emit a specific warning for explicit wave size.
vkd3d-shader/dxil: Emit a specific warning for RT acceleration structs.
vkd3d-shader/spirv: Implement the UNPACK_4X8 instruction.
vkd3d-shader/dxil: Implement DX intrinsic Unpack4x8.
vkd3d-shader/spirv: Implement the PACK_4X8 instruction.
vkd3d-shader/dxil: Implement DX intrinsic Pack4x8.
vkd3d-shader/dxil: Add a second pre-pass for AnnotateHandle.
vkd3d-shader/dxil: Implement DX intrinsics Dot4AddI8Packed and Dot4AddU8Packed.
vkd3d-shader/spirv: Introduce DP4_I8 and DP4_U8 instructions.
vkd3d-shader/spirv: Handle the ORD and UNO instructions.
vkd3d-shader/dxil: Support FCMP_ORD and FCMP_UNO for CMP2.
tests/shader-runner: Add a test for FCMP_ORD (is ordered).
vkd3d-shader/spirv: Support bool comparisons.
vkd3d-shader/dxil: Support scalar ALLOCA.
vkd3d-shader/dxil: Handle resource handle creation in a pre-pass.
vkd3d-shader/dxil: Bitcast the result of image atomic ops if necessary.
vkd3d-shader/dxil: Emit an error for mesh, amplification and library shaders.
vkd3d: Enable KHR_fragment_shader_barycentric.
vkd3d-shader/dxil: Support the barycentrics register type.
vkd3d: Enable EXT_shader_image_atomic_int64.
vkd3d-shader/spirv: Support 64-bit UAV atomics.
vkd3d-shader/dxil: Implement DX intrinsic WaveQuadReadLaneAt.
vkd3d-shader/dxil: Implement DX intrinsic WavePrefixOp.
vkd3d-shader/dxil: Ignore "llvm.lifetime.*" intrinsics.
vkd3d-shader/dxil: Implement DX intrinsic AnnotateHandle.
vkd3d-shader/dxil: Implement DX intrinsic CreateHandleFromBinding.
vkd3d-shader/dxil: Also set the result type for cast to minimum-precision.
vkd3d-shader/spirv: Do not convert 64-bit write mask to 32-bit if register info is 64-bit.
vkd3d-shader/dxil: Handle forward-referenced GEP.
vkd3d-shader/ir: Do not validate SSA with a zero write mask.
vkd3d-shader/dxil: Ignore the auto binding space property.
vkd3d-shader/dxil: Handle constexpr pointer cast.
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-shader/spirv: Support no-op signature elements.
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: Return DXGI_ERROR_NOT_FOUND from 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: 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 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 instruction Coverage.
vkd3d-shader/dxil: Implement DX instruction RenderTargetGetSampleCount.
vkd3d-shader/dxil: Implement DX instructions Texture2DMSGetSamplePosition and RenderTargetGetSamplePosition.
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/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/spirv: Support forward-referenced value ids.
tests: Add SM 6 shader runner tests.
vkd3d: Implement aliasing barriers.
vkd3d: Support formats DXGI_FORMAT_B5G6R5_UNORM, DXGI_FORMAT_B5G5R5A1_UNORM and DXGI_FORMAT_B4G4R4A4_UNORM.
vkd3d: Support depth stencil formats for resources without ALLOW_DEPTH_STENCIL.
vkd3d-shader/spirv: Ensure the data register is UINT in spirv_compiler_emit_store_tgsm().
vkd3d-shader/spirv: Bitcast if necessary in spirv_compiler_emit_store_dst_components().
tests/shader-runner: Add TGSM tests.
vkd3d-shader/dxil: Support constexpr GEP.
vkd3d-shader/spirv: Do not assert if a TGSM store data register is not UINT.
vkd3d-shader/spirv: Do not assert if a TGSM load dst register is not UINT.
vkd3d-shader/spirv: Emit a warning if atomic RMW flags are unhandled.
vkd3d-shader/dxil: Implement the DXIL ATOMICRMW instruction.
vkd3d-shader/dxil: Implement DX instructions ThreadId, GroupId, ThreadIdInGroup and FlattenedThreadIdInGroup.
vkd3d-shader/dxil: Implement DX instruction Barrier.
vkd3d-shader/spirv: Emit a trace message if TGSM alignment is ignored.
vkd3d-shader/dxil: Implement structured groupshared address space global variables.
vkd3d-shader/dxil: Implement raw groupshared address space global variables.
vkd3d-shader/spirv: Support zero-initialisation for workgroup memory.
vkd3d-shader/spirv: Handle the PHI instruction.
vkd3d-shader/spirv: Introduce an UNREACHABLE instruction.
vkd3d-shader/spirv: Support 64-bit switch.
vkd3d-shader/dxil: Support 16-bit types.
vkd3d-shader/spirv: Introduce HALF and UINT16 types for minimum precision.
vkd3d-shader/spirv: Introduce a data_type_is_floating_point() helper function.
tests/shader-runner: Add tests for minimum-precision constants.
tests/shader-runner: Run Shader Model 6 tests in the crossbuild.
vkd3d-shader/spirv: Handle UINT64 source in FIRSTBIT_HI and FIRSTBIT_SHI.
vkd3d-shader/dxil: Implement DX intrinsic TextureGatherCmp.
vkd3d-shader/dxil: Implement DX intrinsic TextureGather.
tests/shader-runner: Add a Gather test with non-constant offset.
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
Fixes a regression introduced by efd3d31082645fab83c6a4994705654edafa9163 ("ntdll: Don't copy xstate from / to syscall frame in usr1_handler().").
SysV x64 ABI assumes 128 byte red zone below stack pointer (for optimizing leaf functions by using the space below rsp saving some stack allocation instructions). I stomped on that red zone is used for real in win32u Unix lib leaf functions causing random crashes inside win32u syscalls when sigusr1 clobbers that zone.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5227
On Mon Mar 4 19:03:27 2024 +0000, Stefan Dösinger wrote:
> What does clipped mean here? Outside of the 0.0;1.0 depth range?
> In the TLVERTEX case you get depth values -0.5, 6.5 and -3.0, suggesting
> that the near and far clip planes don't matter. If I understand this
> test here right they do matter for LVERTEX. That is consistent with
> later d3d versions where Z clipping is essentially disabled when drawing
> pretransformed geometry with the right settings.
> Another way to look at this is that Z clipping is done by
> D3DPROCESSVERTICES_TRANSFORM not the draw op (D3DOP_TRIANGLE).
Yes, depth-clipped.
If I'm understanding your last statement properly, it doesn't seem right. Two triangles could share one or two vertices and still be clipped independently. Further, several of the quads in this test have all vertices outside of [0,1] depth range, yet the portions passing through that depth range do result in successful picks.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3422#note_63433
On Mon Mar 4 19:03:26 2024 +0000, Stefan Dösinger wrote:
> I would expect it to write 3 pick records if the input size in
> record_count is larger than the number retrieved. I.e., if you set
> record_count = 4 and make the array large enough it should write 3 and
> leave the 4th untouched. That's the usual pattern for getters like this
> at least.
I checked this, and you are correct. I will improve the test to cover this as well.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3422#note_63430
Regarding dirty rectangles:<br>
Documentation for `ForceUpdate` states that "The system might update any region that is larger than the specified rectangle, including possibly the entire window". While native seems to use a sort of dirty-rectangle approach, for this MR, I am simply dirtying the entire surface. If someday someone did want to more-closely match the behavior of native, much can be learned from the rectangles passed to the update callbacks.
--
v5: d3drm: Add support for device update callbacks.
d3drm: Blit render target to primary surface on device update.
d3drm: Implement parameter validation for viewport force update.
d3drm/tests: Add tests for Direct3DRMDevice Update
https://gitlab.winehq.org/wine/wine/-/merge_requests/5161
Application "ZusiDisplay" wants to set these socket options. setsockopt() currently returns an error on wine, which prevents the application from working correctly.
I'm not really sure if I'm using the IOCTL_AFD_WINE_SET/GET_* correctly. Maybe the new ones should have different "function" numbers and be sorted below the one for TCP_NODELAY?
Also, not sure if anything needs to be done in unix/socket.c for portability. Are these TCP_KEEPIDLE etc. constants defined on all OSes supported by wine? If not, how should I handle this?
ZusiDisplay seems to work fine if the setsockopt() call is ignored in wine, without returning an error. So if this merge request is not that great, I'd be happy to send a merge request to ignore the call instead.
--
v3: ws2_32: Implement TCP_KEEP{ALIVE,CNT,INTVL} options.
ws2_32/tests: Test TCP_KEEP{ALIVE,CNT,INTVL} options.
include: Add TCP_KEEPCNT and TCP_KEEPINTVL definitions.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5195
Stefan Dösinger (@stefan) commented about dlls/ddraw/tests/ddraw1.c:
> +
> + /* Pick a pixel where multiple quads are present */
> + pick_rect.x1 = pick_rect.x2 = 64;
> + pick_rect.y1 = pick_rect.y2 = 360;
> + record_count = get_pickrecords(device, execute_buffer, viewport, &pick_rect, 3, &record[0]);
> + if (record_count == 3)
> + {
> + /* Documentation states this list is z-ordered, but it appears that it is not. */
> + check_pickrecord(&record[0], D3DOP_TRIANGLE, quad_offset + 12, -0.5f);
> + check_pickrecord(&record[1], D3DOP_TRIANGLE, quad_offset + 32, 6.5f);
> + check_pickrecord(&record[2], D3DOP_TRIANGLE, quad_offset + 52, -3.0f);
> +
> + /* If the count is wrong, do not populate any records */
> + memset(&record, 0, sizeof(record));
> + record_count = 1;
> + hr = IDirect3DDevice_GetPickRecords(device, &record_count, &record[0]);
I would expect it to write 3 pick records if the input size in record_count is larger than the number retrieved. I.e., if you set record_count = 4 and make the array large enough it should write 3 and leave the 4th untouched. That's the usual pattern for getters like this at least.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3422#note_63420
Stefan Dösinger (@stefan) commented about dlls/ddraw/tests/ddraw1.c:
> + /* Pick a pixel where no quads are present */
> + pick_rect.x1 = pick_rect.x2 = 480;
> + pick_rect.y1 = pick_rect.y2 = 360;
> + get_pickrecords(device, execute_buffer, viewport, &pick_rect, 0, NULL);
> +
> + /* Pick a pixel where one quad is present */
> + pick_rect.x1 = pick_rect.x2 = 120;
> + pick_rect.y1 = pick_rect.y2 = 120;
> + record_count = get_pickrecords(device, execute_buffer, viewport, &pick_rect, 1, &record[0]);
> + if (record_count == 1)
> + check_pickrecord(&record[0], D3DOP_TRIANGLE, quad_offset + 12, 0.25f);
> +
> + /* Pick a pixel where quad is clipped */
> + pick_rect.x1 = pick_rect.x2 = 40;
> + pick_rect.y1 = pick_rect.y2 = 120;
> + get_pickrecords(device, execute_buffer, viewport, &pick_rect, 0, NULL);
What does clipped mean here? Outside of the 0.0;1.0 depth range?
In the TLVERTEX case you get depth values -0.5, 6.5 and -3.0, suggesting that the near and far clip planes don't matter. If I understand this test here right they do matter for LVERTEX. That is consistent with later d3d versions where Z clipping is essentially disabled when drawing pretransformed geometry with the right settings.
Another way to look at this is that Z clipping is done by D3DPROCESSVERTICES_TRANSFORM not the draw op (D3DOP_TRIANGLE).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3422#note_63421
This work is based on Wine-Staging patch "msi-msi_vcl_get_cost" by Mark Jansen.
That patch attempts to avoid overflow, although not particularly well, since the
damage would already have been done by calculate_file_cost(). This patch series
addresses the issue in both places.
The Wine-Staging patch seems to have originally been written in an attempt to
address a bug visible with (at least) some Microsoft Office and LibreOffice
installers where file costs would render incorrectly. That bug is recorded as
ReactOS bug 12229 [1], which report includes both the patch to vcl_get_cost(),
and the patch fixing the actual bug, which did eventually made it upstream as
b53957df2a73ae51ca6ebc1e88bb9c4ed8b8d274.
[1] https://jira.reactos.org/browse/CORE-12229
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5216
--
v2: shell32: Implement Paste in the item menu.
shell32: Respect the parent PIDL when pasting from CFSTR_SHELLIDLIST.
shell32: Reimplement pasting from CF_DROP directly.
shell32: Add a get_data_format() helper.
shell32: Move DoPaste() up.
shell32: Remove useless and commented out code.
shell32/tests: Add tests for context menu copy/paste.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5215
This is a change from the default behavior in macdrv for as long as it's existed, as far as I can tell. Previously, gaining a dock icon was a one-way path. However, that doesn't jive with the way taskbar entries work on Windows; if an app has no windows, it doesn't appear in the taskbar. This patch attempts to remedy cases where an app winds up with superfluous dock icons for exe's that no longer have windows (looking at you, basically every launcher and Steam).
The major concern I can see with this is that if an app closes all of its windows but does not exit, there will be no indication that it is still running. Two thoughts on that:
1. That *should* be an anomalous case, such as the app hanging on exit.
2. Effectively the same behavior would happen on Windows.
I would love to hear any other thoughts about this change. I'm open (though I would not prefer it) to defaulting the registry key to false if that would alleviate any concerns.
--
v2: winemac.drv: Hide app's dock icon when it wouldn't have a taskbar item on Windows.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5188
At some point I would like to have an assembler for TPF, so that it's easier to write and modify tests. This is a first step in that direction, fixing some kind of format for serializing signatures in the comment at the beginning of the assembler code. I'm not decided yet on all details, so take this as an RFC for the moment.
--
v8: tests: Test emitting the signature.
vkd3d-compiler: Add an option to emit the signature when disassembling.
vkd3d-shader/d3d-asm: Support emitting the shader signature.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/553
At some point I would like to have an assembler for TPF, so that it's easier to write and modify tests. This is a first step in that direction, fixing some kind of format for serializing signatures in the comment at the beginning of the assembler code. I'm not decided yet on all details, so take this as an RFC for the moment.
--
v7: tests: Test emitting the signature.
vkd3d-compiler: Add an option to emit the signature when disassembling.
vkd3d-shader/d3d-asm: Support emitting the shader signature.
vkd3d-shader/d3d-asm: Refactor dumping a write mask to a dedicated function.
vkd3d-shader/d3d-asm: Describe the ASM dialect with a bunch of flags instead of a plain enum.
vkd3d-shader/d3d-asm: Do not make a copy of the buffer before returning it.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/553
Regarding dirty rectangles:<br>
Documentation for `ForceUpdate` states that "The system might update any region that is larger than the specified rectangle, including possibly the entire window". While native seems to use a sort of dirty-rectangle approach, for this MR, I am simply dirtying the entire surface. If someday someone did want to more-closely match the behavior of native, much can be learned from the rectangles passed to the update callbacks.
--
v4: d3drm: Add support for device update callbacks.
d3drm: Blit render target to primary surface on device update.
d3drm: Implement parameter validation for viewport force update.
d3drm/tests: Add tests for Direct3DRMDevice Update
https://gitlab.winehq.org/wine/wine/-/merge_requests/5161
More details here: https://devblogs.microsoft.com/oldnewthing/20181206-00/?p=100415
However it does not mention that `PAGE_NOACCESS` and `PAGE_READONLY` still result in an error on Windows, which is properly implemented in this MR.
Only `WriteProcessMemory` offers this "service", `NtWriteVirtualMemory` will fail on non-writeable and executable regions (and already does so, except for the the mach server backend, which needs https://gitlab.winehq.org/wine/wine/-/merge_requests/4826 to also behave correctly here).
--
v2: kernelbase: Flush instruction cache when necessary in WriteProcessMemory.
kernelbase: Allow WriteProcessMemory to succeed on PAGE_EXECUTE_READ.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5222
--
v2: vkd3d-dxbc: Add an option to re-emit the shader with the correct checksum.
vkd3d-dxbc: Add an option to ignore checksum.
vkd3d-shader/dxbc: Add flag to ignore the DXBC checksum.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/582
Since Yousician's last update, it was throwing an error when initialising audio output. Unfortunately I don't have access to the old version, but they seem to have dropped win<10 support, and are using only IAudioClient3_InitializeSharedAudioStream. They also use IDeviceTopology to get the type of the first output connector.
This is the bare minimum I needed to get it working.
--
v16: mmdevapi: add stub for IDeviceTopology
mmdevapi/tests: add test for IDeviceTopology
mmdevapi: implement IAudioClient3_InitializeSharedAudioStream
mmdevapi/tests: add test for AudioClient3_InitializeSharedAudioStream
https://gitlab.winehq.org/wine/wine/-/merge_requests/3554
First part of Proton shared memory series. The full branch can be seen at https://gitlab.winehq.org/rbernon/wine/-/commits/mr/shared-memories.
--
v22: win32u: Use the desktop shared data for GetCursorPos.
server: Move the last cursor time to the desktop session object.
server: Move the cursor position to the desktop session object.
win32u: Open desktop shared objects from session mapping.
server: Allocate shared session object for desktops.
win32u: Open the global session shared mapping.
include: Add ReadNoFence64 inline helpers.
server: Create a global session shared mapping.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3103
This was implemented in vkd3d 1.10. Another known feature that has to be enabled with compatibility flag is d3d9 style sampling functions. We currently don't do that, making them supported unconditionally.
--
v2: d3dcompiler: Enable semantic names mapping in compatibility mode.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5146
> I'd rather accumulate flags while compiling the shader rather than doing another pass at the end. Not a terribly strong opinion, though.
In principle I'd be inclined to agree, but this approach seems appropriate this close to the release. Ultimately the tpf writer should get this from the vsir_program, of course.
--
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/685#note_63362
For all mach vm operations this removes the task suspend and resume, which are not needed.
This uses `mach_vm_read_overwrite` to read into a caller-specified buffer, saving the `mach_vm_deallocate` call (bringing all read operations down to 1 syscall from 4).
The only alignment restriction on `mach_vm_write` according to the original CMU documentation is that data is
> [pointer to page aligned in array of bytes] An array of data to be written.
(In practice it also works with arbitrary addresses on macOS, but it probably doesn't hurt to follow the original specifications here).
The only other reference that these read/writes should be page-aligned is from the GNU Hurd documentation
> The current implementation requires that address, data and data_count all be page-aligned. Otherwise, KERN_INVALID_ARGUMENT is returned.
which I assume was the reason why this was originally done (plus it sounds to me like they will fix that in the future and 4fe19777 already broke GNU Hurd support anyways, if that was supposed to be working).
Also this includes the missing mach part of 5b1f3b14, which was only applied to the ptrace backend, and together with the `write_process_memory` rework, this gets rid of all fixmes in mach.c
--
v3: server: Simplify mach write_process_memory.
server: Use mach_vm_read_overwrite in get_selector_entry.
server: Use mach_vm_read_overwrite in read_process_memory.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4826
An extension of 3985b7c5. Opening the device for the Touch Bar on
older MacBooks also triggers a permission prompt, so for now it makes
sense to restrict the devices open.
--
v2: winebus.sys: Only attempt to open joysticks and gamepads in the IOHID backend.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5208
Split from https://gitlab.winehq.org/wine/wine/-/merge_requests/5137
--
v2: win32u: Introduce and use new reg_(open|create)_ascii_key helpers.
win32u: Use set_reg_ascii_value whenever possible.
win32u: Remove unnecessary class_guidW double check.
win32u: Use REG_SZ instead of REG_BINARY for some adapter keys.
win32u: Remove unused wine_devpropkey_monitor_adapternameW property.
win32u: Simplify adapter key path creation from gpu_guid.
win32u: Use char array for the device manager context gpuid.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5174
Wine currently runs all processes with an elevated administrator token. As
described in bug 40613, some applications refuse to be run with such a token.
This patch set addresses the situation by creating all processes with an
unelevated adminstrator token by default. When a process attempts to elevate
itself through one of several mechanisms—which would show a UAC prompt on
Windows—we instead silently elevate the process, as if the user had granted
access through the UAC prompt.
This works for almost all applications. I have found only one application which
didn't get the memo, and actually asks the user to right click and run as
administrator, namely PaintTool SAI. Fortunately, 063a377df4f, combined with the
shell32 patch in this series, allows a Wine user to elevate that process by
opening explorer.exe, right-clicking, and selecting Run as Administrator, just
like on Windows.
This patch series has been in Wine-Staging for about three years. This was
partly to try to find and fix all the different creative ways that applications
tried to elevate themselves, but mostly because I needed to find a solution for
PaintTool SAI, and never quite got the time to implement run-as-administrator in
shell32.
EDIT: Now only includes the patches elevating processes through specific methods (runas, msi).
--
v3:
https://gitlab.winehq.org/wine/wine/-/merge_requests/5118
I think the behaviour of SetWindowPos() in this case is partially explained by the fact that topmost state is not strictly applicable to child windows and so Windows denies such requests. Child window can still end up with WS_EX_TOPMOST style if it was set at window creation (doesn't work this way in Wine now) or, e. g., like in the test added in the patch.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=20190
Also fixes game load dialog in Indiana Jones and the Infernal Machine.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/667
Termios2 is a modern Linux feature thats allows usage of any custom baudrate instead of hardcoded values from the 1970's.
Also, this patch improves compatibility with the win32 api, because windows allow any custom baudrates by design.
Example software for which this patch is needed: http://www.vi-soft.com.ua/index_e.htm
This software for reading/writing/patch fullflash of Siemens mobile phones, where serial speed is important.
V-Klay uses 1600000 baudrate and perfectly works on Linux with termios2 and Prolific PL2303.
--
v5: ntdll/unix: Use termios2 for serial when possible.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5211
Termios2 is a modern Linux feature thats allows usage of any custom baudrate instead of hardcoded values from the 1970's.
Also, this patch improves compatibility with the win32 api, because windows allow any custom baudrates by design.
Example software for which this patch is needed: http://www.vi-soft.com.ua/index_e.htm
This software for reading/writing/patch fullflash of Siemens mobile phones, where serial speed is important.
V-Klay uses 1600000 baudrate and perfectly works on Linux with termios2 and Prolific PL2303.
--
v4: ntdll/unix: Use termios2 for serial when possible.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5211
Normally Cyberpunk 2077 spawns #cpu_threads of dispatcher threads.
However with Freebsd, since create_logical_proc_info was a stub,
the game would instead spawn a single dispatcher thread, causing
the game to just crawl.
Working around the issue by adding a barebone implementation of
create_logical_proc_info for FreeBSD so that the game would at
least get a thread count through ntdll.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5213
Termios2 is a modern Linux feature thats allows usage of any custom baudrate instead of hardcoded values from the 1970's.
Also, this patch improves compatibility with the win32 api, because windows allow any custom baudrates by design.
Example software for which this patch is needed: http://www.vi-soft.com.ua/index_e.htm
This software for reading/writing/patch fullflash of Siemens mobile phones, where serial speed is important.
V-Klay uses 1600000 baudrate and perfectly works on Linux with termios2 and Prolific PL2303.
--
v3: ntdll/unix: Fix building with -Werror when HAVE_ASM_TERMBITS_H is not set
https://gitlab.winehq.org/wine/wine/-/merge_requests/5211
Termios2 is a modern Linux feature thats allows usage of any custom baudrate instead of hardcoded values from the 1970's.
Also, this patch improves compatibility with the win32 api, because windows allow any custom baudrates by design.
Example software for which this patch is needed: http://www.vi-soft.com.ua/index_e.htm
This software for reading/writing/patch fullflash of Siemens mobile phones, where serial speed is important.
V-Klay uses 1600000 baudrate and perfectly works on Linux with termios2 and Prolific PL2303.
--
v2: ntdll/unix: Fix building with -Werror when HAVE_ASM_TERMBITS_H is not set
https://gitlab.winehq.org/wine/wine/-/merge_requests/5211
Termios2 is a modern Linux feature thats allows usage of any custom baudrate instead of hardcoded values from the 1970's.
Also, this patch improves compatibility with the win32 api, because windows allow any custom baudrates by design.
Example software for which this patch is needed: http://www.vi-soft.com.ua/index_e.htm
This software for reading/writing/patch fullflash of Siemens mobile phones, where serial speed is important.
V-Klay uses 1600000 baudrate and perfectly works on Linux with termios2 and Prolific PL2303.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5211
Termios2 is a modern Linux feature thats allows usage of any custom baudrate instead of hardcoded values from the 1970's.
Also, this patch improves compatibility with the win32 api, because windows allow any custom baudrates by design.
Example software for which this patch is needed: http://www.vi-soft.com.ua/index_e.htm
This software for reading/writing/patch fullflash of Siemens mobile phones, where serial speed is important.
V-Klay uses 1600000 baudrate and perfectly works on Linux with termios2 and Prolific PL2303.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5210
I don't think this should be committed so late in the release cycle, but the work others have been doing with point checking functions inspired me to move on this, and I wanted to let folks know what I'm thinking about and get some feedback. Consider it a proof of concept for now.
The problem: GdipGetRegionHRgn is expensive. Regardless of how much of the region we actually care about, we must rasterize the entire plane of that region. Currently, we rely on gdi32 to do this, which doesn't provide us with any way to ask for a smaller area. This has been a real problem for applications that work with very large, non-rectangular regions or paths.
So it seems to me, the solution will involve writing two functions, one of which is in this MR: a bounding-box calculation for regions, and rasterization. Since the result of rasterization will be short-lived, I think it should always be an array of bytes (which are effectively a bitmap but don't require bitwise operations to work with). The rasterization should be limited to a specific integer rectangle, which in the case of GdipIsVisibleRegionPoint can be 1x1 pixel. We should then be able to eliminate all internal uses of GdipGetRegionHRgn, except when we have to return an HRGN to the application.
This would also be useful for implementing anti-aliasing, as we could keep the memory usage down by only rasterizing the part we need for each scanline at a time.
My current concerns about what I've written so far:
* Although it shouldn't change the behavior, I doubt it's adequately tested, even including the Mono tests. I'd like to ideally test every combine mode in a variety of cases.
* This is too clever for its own good. Unfortunately, with the complexity of handling so many combine modes as well as infinities for each region being combined, I think the only available choices are "too clever for its own good" and "20 different special cases that need to be considered manually". Still, I want to make this as simple and easy to follow as possible, within its requirements.
--
v3: gdiplus: Check bounding box in GdipIsVisibleRegionPoint.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4206
First part of Proton shared memory series. The full branch can be seen at https://gitlab.winehq.org/rbernon/wine/-/commits/mr/shared-memories.
--
v21: win32u: Use the desktop shared data for GetCursorPos.
server: Move the last cursor time to the desktop session object.
server: Move the cursor position to the desktop session object.
win32u: Open desktop shared objects from session mapping.
win32u: Add a weak reference count to the shared session.
server: Allocate shared session object for desktops.
win32u: Open the global session shared mapping.
include: Add ReadNoFence64 inline helpers.
server: Create a global session shared mapping.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3103