strmbase: Fallback to InitializeCriticalSection() if RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO is unsupported.
RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO is supported since Win8 and strmbase is used in tests (with fb64ea8675dc1ab4cc4e89a9924f3672a6662136 breaking them on older Win versions).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5355
This isn't all of what Rewrite needs, but it's the large and risky part that would be inappropriate for code freeze.
--
v3: quartz/tests: Add some tests for VMR7 renderless mode.
quartz: Return S_OK from IVMRSurfaceAllocator_PrepareSurface().
quartz: Implement IVMRSurfaceAllocatorNotify::AdviseSurfaceAllocator().
quartz: Reimplement the VMR7 using the VMR7 presenter.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4656
These two commits shouldn't change anything functional wise, but with minimal changes on wine side, they allow easy integration of d3d9/tests/visual.c into GoogleTest native runner. visual.c code is C++ compatible, except the `enums`.
Second change is done, because we had to redefine `ok()` macro, so without proper braces around conditions it cannot be expanded to multiple lines.
Here is [MR how we import](https://github.com/axeldavy/Xnine/pull/12) the `visual.c`
Third commit just correct my name in the `.mailmap`
My main goal here is bring code which run in Mesa3D CI workflow as closer to the original wine d3d9 tests, so we can easily update from wine and eventually provide also fixes and improvements back.
If you find this MR suitable, we could try figure out a way, to incorporate data about [nine_todo](https://github.com/axeldavy/Xnine/commit/7ac97c8350ea5b2bfd7307c…, of course only if you find some use of these extra information.
/cc @zfigura
--
v6: mailmap: Add a mailmap entry for myself with the proper name
d3d9/tests: replace LPDWORD cast with float_to_int function
https://gitlab.winehq.org/wine/wine/-/merge_requests/5324
These two commits shouldn't change anything functional wise, but with minimal changes on wine side, they allow easy integration of d3d9/tests/visual.c into GoogleTest native runner. visual.c code is C++ compatible, except the `enums`.
Second change is done, because we had to redefine `ok()` macro, so without proper braces around conditions it cannot be expanded to multiple lines.
Here is [MR how we import](https://github.com/axeldavy/Xnine/pull/12) the `visual.c`
Third commit just correct my name in the `.mailmap`
My main goal here is bring code which run in Mesa3D CI workflow as closer to the original wine d3d9 tests, so we can easily update from wine and eventually provide also fixes and improvements back.
If you find this MR suitable, we could try figure out a way, to incorporate data about [nine_todo](https://github.com/axeldavy/Xnine/commit/7ac97c8350ea5b2bfd7307c…, of course only if you find some use of these extra information.
/cc @zfigura
--
v5: mailmap: Add a mailmap entry for myself with the proper name
d3d9/tests: replace LPDWORD cast with float_to_int function
https://gitlab.winehq.org/wine/wine/-/merge_requests/5324
As per discussion in 606, plumbing constant buffer reflection through
vkd3d-shader requires interface design and API documentation for an interface
which is inherently quite specific to one format. Instead of wasting time on
this interface, just implement RDEF parsing in vkd3d-utils itself. If we change
our mind about this, we can always move the implementation to vkd3d-shader
anyway.
This does not copy the existing implementation from Wine, because:
* Wine does not validate offsets; adding this changes the parsing code
significantly;
* Wine incorrectly handles types, deduplicating them into an rbtree;
* Wine skips several fields which I have been able to find the purpose of.
The implementation is not that complex to begin with, so reimplementing it from
scratch is not much work.
--
v8: tests: Add more tests for resource and struct RDEF contents.
tests: Test constant and resource reflection via D3DReflect().
vkd3d-shader/tpf: Set the user-packed flag for sm5.0 resources as well.
vkd3d-shader/tpf: Write the component count as the column count for structs.
vkd3d-shader/tpf: Explicitly write the class and base type for non-numeric types.
vkd3d-shader/tpf: Do not write structs with no numeric fields into the RDEF.
vkd3d-shader/hlsl: Allocate register reservations for structs as well.
vkd3d-shader/tpf: Do not write non-numeric struct fields into the RDEF.
vkd3d-utils: Implement ID3D12ShaderReflectionType::GetMemberTypeByIndex().
vkd3d-utils: Implement ID3D12ShaderReflectionVariable::GetType().
vkd3d-utils: Implement ID3D12ShaderReflectionConstantBuffer::GetVariableByIndex().
vkd3d-utils: Parse the RD11 section.
vkd3d-utils: Implement ID3D12ShaderReflection::GetConstantBufferByIndex().
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/626
Goes atop !681. The last 8 commits belong here.
--
v8: 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.
tests/shader-runner: Add TGSM tests.
vkd3d-shader/dxil: Emit an error if a constant code is unhandled.
vkd3d-shader/spirv: Support 64-bit register info component type in spirv_compiler_emit_load_reg().
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.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/707
This is a series of commits tackling dead key state handling and scan code to vkey mapping improvements (especially for French and German keyboards).
* https://gitlab.winehq.org/mzent/wine/-/commit/6c5c90b746cc341049eec216e3bb9…: Simplifies the logic a bit there and also correctly null-terminates dead keys in ToUnicodeEx
* https://gitlab.winehq.org/mzent/wine/-/commit/a05e2fc5068a22cae94bc800b4972…: Windows does not do it and some applications misbehave with this, fully fixed later in https://gitlab.winehq.org/mzent/wine/-/commit/7cf1f6a00f17b0626126448f77a1c…
* https://gitlab.winehq.org/mzent/wine/-/commit/4bd96932139a22f2c3b1311e44c43…: MSDN states single keys are always uppercased there.
* https://gitlab.winehq.org/mzent/wine/-/commit/bac8e97d7e6a7494672d76f5fc586…: There is a bug in `CFStringCompare` with the flags used there currently, resulting in the comparison of the identical buffers "ß" and "ß" to be false. In any case `UCCompareText` behaves correctly and is much faster there.
* https://gitlab.winehq.org/mzent/wine/-/commit/bac5f485a09fbddd39efb8f2c0d87…: I think this was an accidental mistake there, going through all modifiers first per symbol almost always results in the wrong match being made. The logic is adjusted there now to be similar to the other iterations involving `char_matches_string`.
* https://gitlab.winehq.org/mzent/wine/-/commit/ffde55df4ae3f6d53198839c58356…https://gitlab.winehq.org/mzent/wine/-/commit/a453d0d4c89c59c3e1ba6c24d2d0f…: Adds additional symbol vkey mappings (now completely maps a German Macintosh and PC keyboard correctly). There are still some minor defects with the French layout (around the ú region), however changing the symbol mapping there will cause issues with other layouts I think, since the wrong match happens very early there in the priority in these cases. With this change at least the number row is now behaving correctly. Additionally the French Macintosh keyboard layout is further complicated by the "=" key being next to right shift, which is in conflict with pretty much any other keyboard layout. To fix this properly would require a partial rewrite of the heuristic being used or a new approach, but most likely more of a long term project.
* https://gitlab.winehq.org/mzent/wine/-/commit/7cf1f6a00f17b0626126448f77a1c…: Gives dead keys friendly names in `GetKeyNameFriendlyText`, just like Windows does. I tried to be as exhaustive as possible, but if there are any missing the mapping can be easily extended.
All in all the incorrect scan code to vkey mapping is usually not that tragic, since an application would need to be aware of the layout and have its own mapping of scan codes of each (FFXIV does this though). The French layout corrections are now "good enough" to behave correctly for all the hotbar slots being assigned there with these changes now though.
--
v3: winemac.drv: Give dead keys a friendly name in GetKeyNameText.
winemac.drv: Add additional French symbol vkeys.
winemac.drv: Add additional German symbol vkeys.
winemac.drv: Resolve symbol vkeys first without modifiers.
winemac.drv: Use UCCompareText in char_matches_string.
winemac.drv: Uppercase single keys in GetKeyNameText.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5319
These two commits shouldn't change anything functional wise, but with minimal changes on wine side, they allow easy integration of d3d9/tests/visual.c into GoogleTest native runner. visual.c code is C++ compatible, except the `enums`.
Second change is done, because we had to redefine `ok()` macro, so without proper braces around conditions it cannot be expanded to multiple lines.
Here is [MR how we import](https://github.com/axeldavy/Xnine/pull/12) the `visual.c`
Third commit just correct my name in the `.mailmap`
My main goal here is bring code which run in Mesa3D CI workflow as closer to the original wine d3d9 tests, so we can easily update from wine and eventually provide also fixes and improvements back.
If you find this MR suitable, we could try figure out a way, to incorporate data about [nine_todo](https://github.com/axeldavy/Xnine/commit/7ac97c8350ea5b2bfd7307c…, of course only if you find some use of these extra information.
/cc @zfigura
--
v4: mailmap: Add a mailmap entry for myself with the proper name
d3d9/tests: replace LPDWORD cast with float_to_int function
d3d9/tests: define enums outside of struct
https://gitlab.winehq.org/wine/wine/-/merge_requests/5324
I wrote a test intending to find exactly how points are quantized when figuring the region bounding box, so I can make sure I don't break it. Surprisingly, I'm able to just pass in fractional values and get them back. Clearly this isn't based on any quantization.
MSDN says "The rectangle returned by Region::GetBounds is not always the smallest possible rectangle."
MSDN also says that the world and page transformations of the Graphics object are used, which doesn't seem to be the case, but I choose to selectively believe it when tests agree.
So the rectangle we return must enclose the region, but it may be larger than necessary to enclose the region. This is conveniently exactly the same as the get_region_bounding_box function I wrote earlier. (While there may be implementation differences, I think we can worry about that if/when it becomes a problem. We already got by on something very different from native for a long time.)
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5345
(Had to initialize is_yuv in the last change because somehow GCC started to complain about it)
--
v2: mfplat/mediatype: Implement MFInitMediaTypeFromMFVideoFormat.
mfplat/tests: Add tests for MFInitMediaTypeFromMFVideoFormat.
mfplat/mediatype: Stub MFInitMediaTypeFromMFVideoFormat.
mfplat/tests: Check the conditions for the MFVideoFlag_BottomUpLinearRep flags.
mfplat/mediatype: Append user data in MFCreateMFVideoFormatFromMFMediaType.
mfplat/tests: Test that MFCreateMFVideoFormatFromMFMediaType appends user data.
mfplat/tests: Test that aperture is dropped with VIDEOINFOHEADER2.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5348
These two commits shouldn't change anything functional wise, but with minimal changes on wine side, they allow easy integration of d3d9/tests/visual.c into GoogleTest native runner. visual.c code is C++ compatible, except the `enums`.
Second change is done, because we had to redefine `ok()` macro, so without proper braces around conditions it cannot be expanded to multiple lines.
Here is [MR how we import](https://github.com/axeldavy/Xnine/pull/12) the `visual.c`
Third commit just correct my name in the `.mailmap`
My main goal here is bring code which run in Mesa3D CI workflow as closer to the original wine d3d9 tests, so we can easily update from wine and eventually provide also fixes and improvements back.
If you find this MR suitable, we could try figure out a way, to incorporate data about [nine_todo](https://github.com/axeldavy/Xnine/commit/7ac97c8350ea5b2bfd7307c…, of course only if you find some use of these extra information.
/cc @zfigura
--
v3: d3d9/tests: replace LPDWORD with DWORD* in visual.c
https://gitlab.winehq.org/wine/wine/-/merge_requests/5324
There are quite a lot of test failures:
* a never before seen Windows failure in shell32:shlfolder, possibly a spurious notification from elsewhere in the file system;
* a failure in shell32:systray, possibly uID collision;
* bug 53979;
* several jscript and mshtml failures which seem to be fixed, I'm guessing by bd5ab1c6cdb;
* a recent and mostly systematic failure in mf:mf; not sure what's going on there. The only vaguely relevant commit from the period is 14743b0ffb0ce, but I'm not convinced it's related.
I'll try to look into the shell32 and mf failures, but it's clear none of them are related to this patch series.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5335#note_65290
~~This applies on top of !711, the last three commits belong here.~~
This MR and the following ones will introduce a number of optimization passes on the structured representation of the shader, with the goal of fixing the idiosyncrasies of the code generated by the new structurizer. The general pattern is that we want to recognize when the combination of loops and jumps can be rather written with selection constructs. Ideally that should bring to removing all the synthesized loop intervals, but that cannot be guaranteed in general. We still want to do remove all the loops we can, first to make the generated code easier to read and to recompile, and second because having fewer loops also means that more multilevel jumps become ordinary single level jumps, which do not require overhead to be represented in SPIR-V.
--
v3: vkd3d-shader/ir: Synthesize selection constructs from conditional jumps.
vkd3d-shader/ir: Remove trailing `continue's.
vkd3d-shader/ir: Move `continue's to the false branch when possible.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/722
This applies on top of !711, the last three commits belong here.
This MR and the following ones will introduce a number of optimization passes on the structured representation of the shader, with the goal of fixing the idiosyncrasies of the code generated by the new structurizer. The general pattern is that we want to recognize when the combination of loops and jumps can be rather written with selection constructs. Ideally that should bring to removing all the synthesized loop intervals, but that cannot be guaranteed in general. We still want to do remove all the loops we can, first to make the generated code easier to read and to recompile, and second because having fewer loops also means that more multilevel jumps become ordinary single level jumps, which do not require overhead to be represented in SPIR-V.
--
v2: vkd3d-shader/ir: Synthesize selection constructs from conditional jumps.
vkd3d-shader/ir: Remove trailing `continue's.
vkd3d-shader/ir: Move `continue's to the false branch when possible.
vkd3d-shader/ir: Emit multilevel jumps in the structured program.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/722
These two commits shouldn't change anything functional wise, but with minimal changes on wine side, they allow easy integration of d3d9/tests/visual.c into GoogleTest native runner. visual.c code is C++ compatible, except the `enums`.
Second change is done, because we had to redefine `ok()` macro, so without proper braces around conditions it cannot be expanded to multiple lines.
Here is [MR how we import](https://github.com/axeldavy/Xnine/pull/12) the `visual.c`
Third commit just correct my name in the `.mailmap`
My main goal here is bring code which run in Mesa3D CI workflow as closer to the original wine d3d9 tests, so we can easily update from wine and eventually provide also fixes and improvements back.
If you find this MR suitable, we could try figure out a way, to incorporate data about [nine_todo](https://github.com/axeldavy/Xnine/commit/7ac97c8350ea5b2bfd7307c…, of course only if you find some use of these extra information.
/cc @zfigura
--
v2: mailmap: Add a mailmap entry for myself with the proper name
d3d9/tests: define enums outside of struct
https://gitlab.winehq.org/wine/wine/-/merge_requests/5324
The motivator is `ShellExecute`, currently it searches for executables first relative to the current executable, then relative to the current working directory; whereas it should only search in the current working directory.
While trying to fix that, I found some related bugs in `FindExecutable` and `PathResolve`.
--
v7: shell32: Rely solely on SHELL_FindExecutable for ShellExecute.
shell32: Fix FindExecutable search path.
shell32: PathResolve should remove trailing dot.
shell32: PathResolve should be able to find files that already have extensions.
shell32: Make sure PathResolve can find files in the current directory.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5342
These two commits shouldn't change anything functional wise, but with minimal changes on wine side, they allow easy integration of d3d9/tests/visual.c into GoogleTest native runner. visual.c code is C++ compatible, except the `enums`.
Second change is done, because we had to redefine `ok()` macro, so without proper braces around conditions it cannot be expanded to multiple lines.
Here is [MR how we import](https://github.com/axeldavy/Xnine/pull/12) the `visual.c`
Third commit just correct my name in the `.mailmap`
/cc @zfigura
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5324
The motivator is `ShellExecute`, currently it searches for executables first relative to the current executable, then relative to the current working directory; whereas it should only search in the current working directory.
While trying to fix that, I found some related bugs in `FindExecutable` and `PathResolve`.
--
v6: shell32: Rely solely on SHELL_FindExecutable for ShellExecute.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5342
The motivator is `ShellExecute`, currently it searches for executables first relative to the current executable, then relative to the current working directory; whereas it should only search in the current working directory.
While trying to fix that, I found some related bugs in `FindExecutable` and `PathResolve`.
--
v5: shell32: Fix FindExecutable search path.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5342
The motivator is `ShellExecute`, currently it searches for executables first relative to the current executable, then relative to the current working directory; whereas it should only search in the current working directory.
While trying to fix that, I found some related bugs in `FindExecutable` and `PathResolve`.
--
v4: shell32: PathResolve should remove trailing dot.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5342
SM1 support for LOGIC_NOT, LOGIC_OR, and LOGIC_AND.
--
v2: vkd3d-shader/spirv: Throw compiler error on unmapped VKD3DSPR_MISCTYPE register.
vkd3d-shader/spirv: Implement VKD3DSIH_ABS.
vkd3d-shader/d3dbc: Implement HLSL_OP2_LOGIC_AND for SM1.
vkd3d-shader/d3dbc: Implement HLSL_OP2_LOGIC_OR for SM1.
vkd3d-shader/hlsl: Cast to bool before applying LOGIC_NOT.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/724
--
v3: shell32: PathResolve should be able to find files that already have extensions.
shell32: Make sure PathResolve can find files in the current directory.
shell32: PathResolve(file, NULL, ...) should not look in the current directory.
shell32/tests: Check ShellExecute is looking in the correct current directory.
shell32/tests: Check FindExecutable is looking in the correct current directory.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5342
--
v2: shell32/tests: Check that PathResolve(file, NULL, ...) does not look in the current directory.
fixup! shell32/tests: Check ShellExecute is looking in the correct current directory.
fixup! shell32/tests: Check FindExecutable is looking in the correct current directory.
shell32/tests: Check ShellExecute is looking in the correct current directory.
shell32/tests: Check FindExecutable is looking in the correct current directory.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5342
First part of Proton shared memory series. The full branch can be seen at https://gitlab.winehq.org/rbernon/wine/-/commits/mr/shared-memories.
--
v26: 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: Return the desktop object info in get_thread_desktop.
server: Allocate shared session object for desktops.
win32u: Open the global session shared mapping.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3103
--
v2: mfplat/mediatype: Implement some VIDEOINFOHEADER2 dwInterlaceFlags conversion.
mfplat/mediatype: Implement VIDEOINFOHEADER2 dwControlFlags conversion.
mfplat/mediatype: Implement MF_MT_FRAME_RATE from VIDEOINFOHEADER2.
mfplat: Support flexible frame time in MFAverageTimePerFrameToFrameRate.
mfplat/tests: Add more MFAverageTimePerFrameToFrameRate tests.
mfplat/mediatype: Set rcSource and rcTarget if stride differs from width.
mfplat/mediatype: Map rcSource to MF_MT_(PAN_SCAN|MINIMUM_DISPLAY)_APERTURE.
mfplat/mediatype: Set MF_MT_SAMPLE_SIZE from bmiHeader.biSizeImage.
mfplat/mediatype: Support FORMAT_VideoInfo2 in MFInitMediaTypeFromAMMediaType.
mfplat/tests: Test aperture to VIDEOINFOHEADER fields mapping.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5339
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
--
v4: vkd3d-shader/fx: Fail effect writing on unsupported annotations.
vkd3d-shader/fx: Remove newlines from fixme messages.
vkd3d-shader/fx: Add initial support for writing fx_2_0 parameters.
vkd3d-shader/fx: Populate global variables list during context initialization.
vkd3d-shader/fx: Fix an instruction block leak.
vkd3d-shader/fx: Use type writing helper only for fx_4+.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/717
~~This applies on top of !704, the last two commits belong here.~~
Here we finally emit the structured program, replacing the older simple structurizer. The advantage of the new structurizer is that the CFG if statically described in the generated program, without having to trace the value of a variable. Upcoming MRs will make the CFG even simpler, easier to read and hopefully to optimize for downstream compilers.
--
v5: vkd3d-shader/ir: Emit multilevel jumps in the structured program.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/711
--
v3: server: Process internal messages when checking queue status.
server: Check for internal hardware messages before others.
win32u: Use a structure to pass peek_message arguments.
server: Send WM_WINE_SETCURSOR message only when necessary.
server: Send WM_WINE_CLIPCURSOR message only when necessary.
winex11: Accept key and mouse events with QS_RAWINPUT.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5322
--
v2: server: Do not use QS_RAWINPUT for internal hardware messages.
server: Clear queue QS_RAWINPUT if get_rawinput_buffer got everything.
server: Process internal messages when checking queue status.
server: Check for internal hardware messages before other messages.
win32u: Use a structure to pass peek_message arguments.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5322
First part of Proton shared memory series. The full branch can be seen at https://gitlab.winehq.org/rbernon/wine/-/commits/mr/shared-memories.
--
v25: 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: Return the desktop object info in get_thread_desktop.
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
--
v6: explorer: Restore display settings on process exit.
winex11.drv: Process RRNotify events in xrandr14_get_id.
user32/tests: Test that display settings are restored on process exit.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5060
--
v14: 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 is the first of a couple of patch sets which intend to impose some new
requirements on GL support. In total I intended to submit patches to require
these things:
* EXT_framebuffer_object
* ARB_texture_non_power_of_two (including WINED3D_GL_NORMALIZED_TEXRECT)
* GLSL 1.20
And, unless demand to the contrary is demonstrated, to remove the code paths
that care about their absence. This means that the "OffscreenRenderingMode"
setting, the ARB shader backend, and all non-GLSL fixed-function pipeline
backends will be removed.
All of these extensions are at least 17 years old at the current date.
--
Some explanation may be warranted. In general Wine is reticent to impose heavy
requirements on users' software or hardware, and when it comes to Direct3D we
have been especially conservative in this respect.
Critically, this is not necessarily a matter of being realistically concerned
about hardware or software still in use—although we do tend to be more conscious
than most projects about some users' long-term support requirements—but more
importantly that we do not waste time removing features just because they are
believed to be obsolete.
Even where related code is being touched, and hence removing code may seem
helpful, it is often easy and generally better to abstract away and "quarantine"
that code. The ARB shader backend, for example, is very much quarantined in this
way; it is not difficult to modify the GLSL backend and leave the ARB backend
alone.
With that said, as far as the listed extensions are concerned, there are some
reasons I would like to impose these requirements anyway.
* In the first case, not all code can be easily "quarantined". Support for
ORM_BACKBUFFER, in particular, is very invasive, and affects a large number of
disparate places in small ways, rather than being a single alternate path.
Support for NP2 fixup is similar, although perhaps a bit less invasive than
ORM_BACKBUFFER.
* Even with code that can be quarantined, there are some smaller, but I believe
nonnegligible, costs to keeping that code around. Speaking in concrete terms
so as to be more understandable, if I wish to refactor the way states are
tracked and invalidated, I need to do some work to either refactor other
backends the same way as the GLSL backend (e.g. 5126), or adjust the
quarantine so that the old path is kept around just for quarantined code.
Doing the latter has a tendency to build up and make the code difficult to
follow. A new contributor can easily get led down the wrong path that way.
* Somewhat relatedly, when some functionality or internal helper needs to be
fixed, a contributor (and the maintainer) needs to then either spend time
fixing *every* backend, or know that some backends don't matter and ignore
them [if ignoring is even feasible for a given change].
The latter can be difficult to discover, especially for a new contributor, and
even then it takes time—and, in a malleable sense, maintenance burden—to look
through code and confirm that it doesn't matter.
To be clear, this is not meant as rationale to start removing anything and
everything. As with all things, these are tradeoffs, between all of the above
reasons to keep or remove any given code. The three listed GL extensions are the
only three which I believe, at the moment, that there is enough utility in
requiring, and little enough reason to keep.
This was a matter of some internal discussion among Direct3D contributors.
However, there is not really a consensus — or at least not an enthusiastic
consensus — that this is desirable. The above is an attempt to summarize the
concerns and justify why I personally think this is a good idea. But it's a
difficult decision, and that's at least in part because this code is the best
translation layer from old Direct3D to *contemporaneous* GL, and it's sad to see
that go.
At the same time, in the world of version control, no code is ever truly gone.
Hence perhaps the most simple argument to make is that if we are really going to
*maintain* this code, that will take extra work—work which at this point I
really would rather not do—and if we are not going to maintain it, then we're
not offering any more utility than an actual git archive.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5338
--
v13: 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
--
v12: 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
--
v11: 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
--
v10: 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