fd738e3387
In Metal, the `[[position]]` input to a fragment shader remains at fragment center, even at sample rate, like OpenGL and Direct3D. In Vulkan, however, when the fragment shader runs at sample rate, the `FragCoord` builtin moves to the sample position in the framebuffer, instead of the fragment center. To account for this difference, adjust the `FragCoord`, if present, by the sample position. The -0.5 offset is because the fragment center is at (0.5, 0.5). Also, add an option to force sample-rate shading in a fragment shader. Since Metal has no explicit control for this, this is done by adding a dummy `[[sample_id]]` which is otherwise unused, if none is already present. This is intended to be used from e.g. MoltenVK when a pipeline's `minSampleShading` value is nonzero. Instead of checking if any `Input` variables have `Sample` interpolation, I've elected to check that the `SampleRateShading` capability is present. Since `SampleId`, `SamplePosition`, and the `Sample` interpolation decoration require this cap, this should be equivalent for any valid SPIR-V module. If this isn't acceptable, let me know. |
||
---|---|---|
.. | ||
depth-compare.asm.frag | ||
global-constant-arrays.asm.frag | ||
padded-float-array-member-defef.asm.frag | ||
sample-mask-not-array.asm.frag | ||
subpass-input.ios.framebuffer-fetch.asm.frag | ||
subpass-input.msl23.framebuffer-fetch.asm.frag | ||
texture-atomics.asm.argument.msl2.frag | ||
texture-atomics.asm.frag | ||
texture-atomics.asm.graphics-robust-access.frag |