// Copyright 2016 The SwiftShader Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef sw_Primitive_hpp #define sw_Primitive_hpp #include "Vertex.hpp" #include "Device/Config.hpp" namespace sw { struct Triangle { Vertex v0; Vertex v1; Vertex v2; }; struct PlaneEquation // z = A * x + B * y + C { float4 A; float4 B; float4 C; }; struct Primitive { int yMin; int yMax; float4 xQuad; float4 yQuad; PlaneEquation z; PlaneEquation w; union { struct { PlaneEquation C[2][4]; PlaneEquation T[8][4]; PlaneEquation f; }; PlaneEquation V[MAX_FRAGMENT_INPUTS][4]; }; float area; // Masks for two-sided stencil int64_t clockwiseMask; int64_t invClockwiseMask; struct Span { unsigned short left; unsigned short right; }; // The rasterizer adds a zero length span to the top and bottom of the polygon to allow // for 2x2 pixel processing. We need an even number of spans to keep accesses aligned. Span outlineUnderflow[2]; Span outline[OUTLINE_RESOLUTION]; Span outlineOverflow[2]; }; } #endif // sw_Primitive_hpp