summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/compiler/translator/ParamType.h
blob: dddb4e9901f59b04fd7666b72dad895ab676d2b6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
//
// Copyright 2017 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// ParamType:
//   Helper type for built-in function emulator tables. Defines types for parameters.

#ifndef COMPILER_TRANSLATOR_PARAMTYPE_H_
#define COMPILER_TRANSLATOR_PARAMTYPE_H_

#include "common/angleutils.h"
#include "compiler/translator/BaseTypes.h"

namespace sh
{

enum class ParamType : uint8_t
{
    Void,
    Bool1,
    Bool2,
    Bool3,
    Bool4,
    Float1,
    Float2,
    Float3,
    Float4,
    Int1,
    Int2,
    Int3,
    Int4,
    Mat2,
    Mat3,
    Mat4,
    Uint1,
    Uint2,
    Uint3,
    Uint4,
    Last,
};

struct ParamTypeInfo
{
    ParamType self;
    TBasicType basicType;
    int primarySize;
    int secondarySize;
};

constexpr ParamTypeInfo g_ParamTypeInfo[] = {
    {ParamType::Void, EbtVoid, 1, 1},    {ParamType::Bool1, EbtBool, 1, 1},
    {ParamType::Bool2, EbtBool, 2, 1},   {ParamType::Bool3, EbtBool, 3, 1},
    {ParamType::Bool4, EbtBool, 4, 1},   {ParamType::Float1, EbtFloat, 1, 1},
    {ParamType::Float2, EbtFloat, 2, 1}, {ParamType::Float3, EbtFloat, 3, 1},
    {ParamType::Float4, EbtFloat, 4, 1}, {ParamType::Int1, EbtInt, 1, 1},
    {ParamType::Int2, EbtInt, 2, 1},     {ParamType::Int3, EbtInt, 3, 1},
    {ParamType::Int4, EbtInt, 4, 1},     {ParamType::Mat2, EbtFloat, 2, 2},
    {ParamType::Mat3, EbtFloat, 3, 3},   {ParamType::Mat4, EbtFloat, 4, 4},
    {ParamType::Uint1, EbtUInt, 1, 1},   {ParamType::Uint2, EbtUInt, 2, 1},
    {ParamType::Uint3, EbtUInt, 3, 1},   {ParamType::Uint4, EbtUInt, 4, 1},
};

constexpr size_t ParamTypeIndex(ParamType paramType)
{
    return static_cast<size_t>(paramType);
}

constexpr size_t NumParamTypes()
{
    return ParamTypeIndex(ParamType::Last);
}

static_assert(ArraySize(g_ParamTypeInfo) == NumParamTypes(), "Invalid array size");

constexpr TBasicType GetBasicType(ParamType paramType)
{
    return g_ParamTypeInfo[ParamTypeIndex(paramType)].basicType;
}

constexpr int GetPrimarySize(ParamType paramType)
{
    return g_ParamTypeInfo[ParamTypeIndex(paramType)].primarySize;
}

constexpr int GetSecondarySize(ParamType paramType)
{
    return g_ParamTypeInfo[ParamTypeIndex(paramType)].secondarySize;
}

constexpr bool SameParamType(ParamType paramType,
                             TBasicType basicType,
                             int primarySize,
                             int secondarySize)
{
    return GetBasicType(paramType) == basicType && primarySize == GetPrimarySize(paramType) &&
           secondarySize == GetSecondarySize(paramType);
}

}  // namespace sh

#endif  // COMPILER_TRANSLATOR_PARAMTYPE_H_