skia2/tests/sksl/shared/SampleLocations.metal
Brian Salomon 3e2fe2b007 One function for computing rt-adjust uniform once flip is determined.
Add some comments explaining why different APIs flip the way they do.

Remove flip from Metal code generator and reverse the way flipping
occurs in Metal backend.

Change-Id: Ibec71e8d96c66d4b34b5ce6417056674090f979c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/413236
Reviewed-by: Brian Osman <brianosman@google.com>
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
2021-06-02 19:02:06 +00:00

34 lines
1.3 KiB
Metal

#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct Inputs {
};
struct Outputs {
float4 sk_Position [[position]];
float2 vcoord_Stage0 [[user(locn1)]];
float sk_PointSize [[point_size]];
};
vertex Outputs vertexMain(Inputs _in [[stage_in]], uint sk_VertexID [[vertex_id]], uint sk_InstanceID [[instance_id]]) {
Outputs _out;
(void)_out;
int x = sk_InstanceID % 200;
int y = sk_InstanceID / 200;
int ileft = (sk_InstanceID * 929) % 17;
int iright = (ileft + 1) + (sk_InstanceID * 1637) % (17 - ileft);
int itop = (sk_InstanceID * 313) % 17;
int ibot = (itop + 1) + (sk_InstanceID * 1901) % (17 - itop);
float outset = 0.03125;
outset = 0 == (x + y) % 2 ? -outset : outset;
float l = float(ileft) / 16.0 - outset;
float r = float(iright) / 16.0 + outset;
float t = float(itop) / 16.0 - outset;
float b = float(ibot) / 16.0 + outset;
float2 vertexpos;
vertexpos.x = float(x) + (0 == sk_VertexID % 2 ? l : r);
vertexpos.y = float(y) + (0 == sk_VertexID / 2 ? t : b);
_out.vcoord_Stage0.x = float(0 == sk_VertexID % 2 ? -1 : 1);
_out.vcoord_Stage0.y = float(0 == sk_VertexID / 2 ? -1 : 1);
_out.sk_Position = float4(vertexpos.x, vertexpos.y, 0.0, 1.0);
return _out;
}