This defines (and, broadly, implements) the API for mapping sm1 combined samplers to the target environment. This is possibly the simplest bit of API for sm1 support thus far.
It does not actually involve any API changes. Rather, each combined sampler is split into two descriptors, one for the sampler and one for the texture, both with the same binding index as the original combined sampler.
--
I feel rather positive about this bit of API. it required very little design concern or implementation difficulty on the vkd3d side.
Right, this is essentially how this was intended to work.
An argument could perhaps be made that VKD3DSPR_COMBINED_SAMPLER is somewhat superfluous because the distinction between VKD3DSPR_COMBINED_SAMPLER and VKD3DSPR_SAMPLER is implied by the shader model, but I think the added clarity is helpful.
There's perhaps also an argument that we should describe how d3dbc descriptors are mapped to vkd3d-shader descriptors in the vkd3d_shader_scan_descriptor_info documentation, much like we do for d3dbc shader constants. The instructions for vkd3d_shader_resource_binding and vkd3d_shader_combined_resource_sampler would then logically fall out of that.
+static enum vkd3d_result normalise_combined_samplers(struct vkd3d_shader_parser *parser) +{ ... + FIXME("Unhandled instruction %#x.\n", ins->handler_idx); + return VKD3D_ERROR_NOT_IMPLEMENTED;
vkd3d_shader_parser_error(), please. Conveniently, we already have VKD3D_SHADER_ERROR_VSIR_NOT_IMPLEMENTED.