blob: c696cafff77d09e8c717b0965f6aca038ec36214 [file] [log] [blame]
Nicolas Capens68a82382018-10-02 13:16:55 -04001// Copyright 2016 The SwiftShader Authors. All Rights Reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#ifndef sw_Clipper_hpp
16#define sw_Clipper_hpp
17
Nicolas Capensd37b0ab2019-12-13 09:35:16 -050018#include "System/Types.hpp"
19
Nicolas Capens157ba262019-12-10 17:49:14 -050020namespace sw {
21
22struct DrawCall;
23struct Polygon;
Nicolas Capens157ba262019-12-10 17:49:14 -050024
25struct Clipper
Nicolas Capens68a82382018-10-02 13:16:55 -040026{
Nicolas Capens157ba262019-12-10 17:49:14 -050027 enum ClipFlags
Nicolas Capens68a82382018-10-02 13:16:55 -040028 {
Nicolas Capens157ba262019-12-10 17:49:14 -050029 // Indicates the vertex is outside the respective frustum plane
Ben Claytonfccfc562019-12-17 20:37:31 +000030 CLIP_RIGHT = 1 << 0,
31 CLIP_TOP = 1 << 1,
32 CLIP_FAR = 1 << 2,
33 CLIP_LEFT = 1 << 3,
Nicolas Capens157ba262019-12-10 17:49:14 -050034 CLIP_BOTTOM = 1 << 4,
Ben Claytonfccfc562019-12-17 20:37:31 +000035 CLIP_NEAR = 1 << 5,
Nicolas Capens68a82382018-10-02 13:16:55 -040036
Nicolas Capens157ba262019-12-10 17:49:14 -050037 CLIP_FRUSTUM = 0x003F,
Nicolas Capens68a82382018-10-02 13:16:55 -040038
Ben Claytonfccfc562019-12-17 20:37:31 +000039 CLIP_FINITE = 1 << 7, // All position coordinates are finite
Nicolas Capens68a82382018-10-02 13:16:55 -040040 };
Nicolas Capens157ba262019-12-10 17:49:14 -050041
42 static unsigned int ComputeClipFlags(const float4 &v);
43 static bool Clip(Polygon &polygon, int clipFlagsOr, const DrawCall &draw);
44};
45
46} // namespace sw
Nicolas Capens68a82382018-10-02 13:16:55 -040047
Ben Claytonfccfc562019-12-17 20:37:31 +000048#endif // sw_Clipper_hpp