I haven't reviewed in depth yet, but for the moment I wouldn't mix shader runner tests between SM1-5 and SM6. The SM6 parser is still so crude that it fails on basically everything; also, running SM6 tests requires installing a separate binary component, which developers not interested about SM6 might not have. This would make the handling of `todo_6` and similar annotations more complicated, and for very little useful signal.
For the moment I'd rather keep SM6 tests separated from all the others, and merge them once the SM6 parser allow a decent amount of them to pass.
I don't think that's a problem per se; I think it's fine to annotate some tests with todo/skip/fail based on e.g. the shader model or possible a specific runner. The CI can hopefully help avoid the need for each individual contributor to have a working dxcompiler installation, though I could certainly see it being a bit of a pain when adding new tests, certainly in the beginning when essentially nothing works.
I would like something a bit more coherent than "fail_tpf", "skip_dxil", and "todo_6" though. How about something along the lines of "fail(shader model < 6.0)" and "todo(shader model >= 6.0)"? "skip_dxil" sounds like it should simply be a "shader model < 6.0" line in the "[require]" section.
Also, I would like to have some appropriate abstractions in the shader runner (and in the other vkd3d tests) so that SM6 support is not a special case everywhere, but rather the shader runner itself has support for having different shader compilers (vkd3d-shader, d3dcompiler_xx.dll, dxcompiler.dll) and for targeting different profiles in somehow the same way it now allows using different execution environments (that that support too is still to be perfected). Using SM6 and dxcompiler.dll should just be another case along these axes, rather than an exceptional code flow everywhere.
Essentially, yes. I'm not necessarily convinced that we fully need to resolve that as part of this MR, but plumbing through a "use_dxcompiler" flag everywhere doesn't seem like a step in the right direction; I'd already feel a fair bit better about this if it was expressed in terms of minimum/maximum shader models. I.e., something along the lines of
```c run_shader_tests_d3d12(SHADER_MODEL_4_0, SHADER_MODEL_5_1); run_shader_tests_d3d12(SHADER_MODEL_6_0, SHADER_MODEL_6_0); ```
instead of
```c run_shader_tests_d3d12(false); run_shader_tests_d3d12(true); ```
There are a bunch of style issues in dxcompiler.idl, which I think should be fairly self-evident at this point. Beyond those though, why do we need that to be a public header?
The shader runner changes at first sight look like multiple changes in a single commit.
You'll probably want to use vkd3d_dlopen() and vkd3d_dlsym(), much like the Vulkan runner does.
It's perhaps worth pointing out that "8ba5fb08-5195-40e2-ac58-0d989c3a0102" is also the uuid for ID3D10Blob/ID3DBlob. It looks like IDxcBlob is a simple alias.