I'm not too worried about it at this point, but note that in principle we don't need to compute the minimum/maximum shader model for the condition in read_qualifier_args_conjunction(). We could just pass it "sm", and then evaluate each part of the condition individually.
I see, I don't know why I thought it was necessary to return the conditions in read_qualifier_args_conjunction(). Well, now we just pass the shader_model, and if we add additional input formats, we could potentially include them as new values for the enum shader_model.
Those traces aren't quite right. We could do something similar to what we do with HLSL_COMPILER to switch between "vkd3d" and "d3d12.dll" here, or we could just use "#ifdef VKD3D_CROSSTEST" to print different traces like the original code does.
Yep, if I am not mistaken I forgot that for _WIN32 and on Linux the runner is "vkd3d" and not "d3d12.dll", and to only print the "Int64ShaderOps" trace when we have a dxc_compiler.
Also, since we will make each runner handle the compilation, maybe we make these macros a `static const char*` on each runner file (as I did in this version) instead of global macros in `shader_runner.h`, what do you think of this?
We might as well merge those two "if (dxc_compiler)" blocks.
Done.
The "SM1 shaders" wording is perhaps a bit unfortunate, given that we're passing SHADER_MODEL_2_0 as the minimum above. Applies to the d3d9 runner as well.
I replaced "SM1" with "SM2-SM3", and for consistency "SM4" with "SM4-SM5", if that seems right.