7eecf5a46b
This is needed to support `VK_KHR_multiview`, which is in turn needed for Vulkan 1.1 support. Unfortunately, Metal provides no native support for this, and Apple is once again less than forthcoming, so we have to implement it all ourselves. Tessellation and geometry shaders are deliberately unsupported for now. The problem is that the current implementation encodes the `ViewIndex` as part of the `InstanceIndex`, which in the SPIR-V environment at least only exists in the vertex shader. So we need to work out a way to pass the view index along to the later stages. This implementation runs vertex shaders for all views up to the highest bit set in the view mask, even those whose bits are clear. The fragments for the inactive views are then discarded. Avoiding this is difficult: calculating the view indices becomes far more complicated if we can only run for those views which are set in the mask.
15 lines
217 B
GLSL
15 lines
217 B
GLSL
#version 310 es
|
|
#extension GL_EXT_multiview : require
|
|
|
|
layout(std140, binding = 0) uniform MVPs
|
|
{
|
|
mat4 MVP[2];
|
|
};
|
|
|
|
layout(location = 0) in vec4 Position;
|
|
|
|
void main()
|
|
{
|
|
gl_Position = MVP[gl_ViewIndex] * Position;
|
|
}
|