2019-06-05 17:35:46 -04:00
|
|
|
// Automatically generated from files in pathfinder/shaders/. Do not edit!
|
2019-06-05 20:20:12 -04:00
|
|
|
#pragma clang diagnostic ignored "-Wmissing-prototypes"
|
|
|
|
|
|
|
|
#include <metal_stdlib>
|
|
|
|
#include <simd/simd.h>
|
|
|
|
|
|
|
|
using namespace metal;
|
|
|
|
|
|
|
|
struct main0_out
|
|
|
|
{
|
|
|
|
float2 vFrom [[user(locn0)]];
|
|
|
|
float2 vTo [[user(locn1)]];
|
|
|
|
float4 gl_Position [[position]];
|
|
|
|
};
|
|
|
|
|
|
|
|
struct main0_in
|
|
|
|
{
|
2019-06-05 17:35:46 -04:00
|
|
|
uint2 aTessCoord [[attribute(0)]];
|
2019-06-05 20:20:12 -04:00
|
|
|
uint aFromPx [[attribute(1)]];
|
|
|
|
uint aToPx [[attribute(2)]];
|
|
|
|
float2 aFromSubpx [[attribute(3)]];
|
|
|
|
float2 aToSubpx [[attribute(4)]];
|
|
|
|
uint aTileIndex [[attribute(5)]];
|
|
|
|
};
|
|
|
|
|
2020-04-23 21:00:52 -04:00
|
|
|
static inline __attribute__((always_inline))
|
2019-06-05 17:35:46 -04:00
|
|
|
float2 computeTileOffset(thread const uint& tileIndex, thread const float& stencilTextureWidth, thread float2 uTileSize)
|
2019-06-05 20:20:12 -04:00
|
|
|
{
|
|
|
|
uint tilesPerRow = uint(stencilTextureWidth / uTileSize.x);
|
2019-06-05 17:35:46 -04:00
|
|
|
uint2 tileOffset = uint2(tileIndex % tilesPerRow, tileIndex / tilesPerRow);
|
2019-06-05 20:20:12 -04:00
|
|
|
return float2(tileOffset) * uTileSize;
|
|
|
|
}
|
|
|
|
|
2020-04-23 21:00:52 -04:00
|
|
|
vertex main0_out main0(main0_in in [[stage_in]], constant float2& uTileSize [[buffer(0)]], constant float2& uFramebufferSize [[buffer(1)]])
|
2019-06-05 20:20:12 -04:00
|
|
|
{
|
|
|
|
main0_out out = {};
|
|
|
|
uint param = in.aTileIndex;
|
2020-04-23 21:00:52 -04:00
|
|
|
float param_1 = uFramebufferSize.x;
|
|
|
|
float2 tileOrigin = computeTileOffset(param, param_1, uTileSize);
|
2019-06-05 20:20:12 -04:00
|
|
|
float2 from = float2(float(in.aFromPx & 15u), float(in.aFromPx >> 4u)) + in.aFromSubpx;
|
|
|
|
float2 to = float2(float(in.aToPx & 15u), float(in.aToPx >> 4u)) + in.aToSubpx;
|
|
|
|
float2 position;
|
2019-06-05 17:35:46 -04:00
|
|
|
if (in.aTessCoord.x == 0u)
|
2019-06-05 20:20:12 -04:00
|
|
|
{
|
|
|
|
position.x = floor(fast::min(from.x, to.x));
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
position.x = ceil(fast::max(from.x, to.x));
|
|
|
|
}
|
2019-06-05 17:35:46 -04:00
|
|
|
if (in.aTessCoord.y == 0u)
|
2019-06-05 20:20:12 -04:00
|
|
|
{
|
|
|
|
position.y = floor(fast::min(from.y, to.y));
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2020-04-23 21:00:52 -04:00
|
|
|
position.y = uTileSize.y;
|
2019-06-05 20:20:12 -04:00
|
|
|
}
|
|
|
|
out.vFrom = from - position;
|
|
|
|
out.vTo = to - position;
|
2020-04-23 21:00:52 -04:00
|
|
|
float2 globalPosition = (((tileOrigin + position) / uFramebufferSize) * 2.0) - float2(1.0);
|
2019-06-05 17:35:46 -04:00
|
|
|
globalPosition.y = -globalPosition.y;
|
|
|
|
out.gl_Position = float4(globalPosition, 0.0, 1.0);
|
2019-06-05 20:20:12 -04:00
|
|
|
return out;
|
|
|
|
}
|
|
|
|
|