Currently we are not properly handling register(cX) reservations for SM1, this is one of the things required for the SNK shaders (CW Bug Bug 18092).
register(cX) reservations also change the offset in the $Globals buffer in SM4, so support for this is also included.
---
Patch 1/4 is required to specify:
```
[require]
shader model < 4.0
```
so that the tests that follow do not get run with the vulkan backend on SM4. I think nobody disagreed with that patch.
--
v3: vkd3d-shader/hlsl: Turn register(cX) reservations into buffer offset for SM4.
tvkd3d-shader/hlsl: Make register(cX) reservations work for SM1.
tests: Test register(cX) reservations.
tests: Rename register-reservations.shader_test to register-reservations-resources.shader_test.
tests/vkd3d-shader: Allow passing (sm<4) and (sm>=4) to "fail" and "todo" qualifiers.
tests/shader-runner: Discern between the minimum_shader_model and the selected_shader_model.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/458
On Tue Nov 14 11:01:46 2023 +0000, Rémi Bernon wrote:
> Hmm, right but does FluidSynth support such things? I had the impression
> (but haven't confirmed it in any way) that they have dedicated
> generators for some often used connections and that these were not
> supposed to be set through fluid_mod. So, under that assumption a custom
> connection to link SRC_KEYNUMBER -> DST_EG1_DECAYTIME would not be
> possible to map?
Looking a bit more into FS, it seems possible that it actually supports this, with fluid_voice_modulate updating generators "mod" value (used in fluid_voice_gen_value return) and calling fluid_voice_update_param, which calls calculate_hold_decay_buffers.
In this case would it be simpler for our mapping to use mods for everything instead of setting it through these special generators?
Anyway, for the fixups I think we could have a list of `fluid_mod` to apply like this, using `fluid_mod_test_identity` to replace identical mod entries:
```c
struct mod_entry
{
struct list entry;
fluid_mod_t *mod;
};
```
And if we can use mods for most generators, I can even imagine having an additional `int mode` field to keep at most one `FLUID_VOICE_OVERWRITE` and one `FLUID_VOICE_ADD` mod of each, translating and de-duplicating / fixing up all articulations at once, then adding the resulting mod list to the voice in a separate step.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4375#note_52231
On Tue Nov 14 10:43:53 2023 +0000, Anton Baskanov wrote:
> DLS2 spec has a table of fixed routing connections that must be
> supported, but also mentions that implementations are free to support
> other connections as well.
> Imagine a DLS file that has a SRC_KEYNUMBER->DST_EG1_DECAYTIME
> connection with a controller. It would require a dynamic offset
> adjustment based on the controller value. And there could be multiple
> such connections, each with a different controller.
Hmm, right but does FluidSynth support such things? I had the impression (but haven't confirmed it in any way) that they have dedicated generators for some often used connections and that these were not supposed to be set through fluid_mod. So, under that assumption a custom connection to link SRC_KEYNUMBER -> DST_EG1_DECAYTIME would not be possible to map?
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4375#note_52212
On Tue Nov 14 10:00:34 2023 +0000, Rémi Bernon wrote:
> What do you mean by arbitrary connections?
DLS2 spec has a table of fixed routing connections that must be supported, but also mentions that implementations are free to support other connections as well.
Imagine a DLS file that has a SRC_KEYNUMBER->DST_EG1_DECAYTIME connection with a controller. It would require a dynamic offset adjustment based on the controller value. And there could be multiple such connections, each with a different controller.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4375#note_52209