I don't think I understand the point of 3/4?
Basically what I replied to gio. Reinterpreting the `minimum_shader_model` and `maximum_shader_model` arguments as "The range of shader models for which we are interested on running tests on this call." instead of "The range of shader models this runner supports.", so we can control how many tests we want to run for a given runner (like one for the sm2 to sm3 range and one for the sm4 to the sm5.1 range, or one for every shader model).
If we were to have a backend that can run from SM2 to SM5, we probably wouldn't want to just test SM2 (and only higher profiles when the [require] directive is in place), but rather, we would want to run it once for SM2-3 and once for SM4-5.1. The same for a compiler without `runner->ops`.
So we have to make the distinction between "the lowest SM we are interested in running", and "the lowest SM the backend supports with the given requirements", which becomes more evident in following patches such as [1d07c851b962e9b02cdf07ff68a9ebdfb7d93357](https://gitlab.winehq.org/fcasas/vkd3d/-/commit/1d07c851b962e9b02cdf07ff68a9...).
That is why these minimum_shader and maximum_shader should be passed as arguments to the run_shader_tests_*() functions.