Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/glslang/SPIRV/spvUtil.h
21733 views
1
//
2
// Copyright (C) 2025 Jan Kelemen
3
//
4
// All rights reserved.
5
//
6
// Redistribution and use in source and binary forms, with or without
7
// modification, are permitted provided that the following conditions
8
// are met:
9
//
10
// Redistributions of source code must retain the above copyright
11
// notice, this list of conditions and the following disclaimer.
12
//
13
// Redistributions in binary form must reproduce the above
14
// copyright notice, this list of conditions and the following
15
// disclaimer in the documentation and/or other materials provided
16
// with the distribution.
17
//
18
// Neither the name of 3Dlabs Inc. Ltd. nor the names of its
19
// contributors may be used to endorse or promote products derived
20
// from this software without specific prior written permission.
21
//
22
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26
// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
// POSSIBILITY OF SUCH DAMAGE.
34
//
35
#pragma once
36
#ifndef spvUtil_H
37
#define spvUtil_H
38
39
#include <cstdint>
40
#include <type_traits>
41
42
#include "spirv.hpp11"
43
44
namespace spv {
45
__inline uint32_t operator&(uint32_t value, spv::MemoryAccessMask mask) { return value & (unsigned)mask; }
46
47
__inline bool operator==(uint32_t word, spv::FPEncoding encoding) { return word == (unsigned)encoding; }
48
__inline bool operator!=(uint32_t word, spv::FPEncoding encoding) { return !(word == encoding); }
49
50
__inline bool operator==(uint32_t word, spv::Decoration decoration) { return word == (unsigned)decoration; }
51
__inline bool operator!=(uint32_t word, spv::Decoration decoration) { return !(word == decoration); }
52
53
__inline bool operator==(uint32_t word, spv::Op op) { return word == (unsigned)op; }
54
__inline bool operator!=(uint32_t word, spv::Op op) { return !(word == op); }
55
56
__inline bool operator==(uint32_t word, spv::StorageClass storage) { return word == (unsigned)storage; }
57
__inline bool operator!=(uint32_t word, spv::StorageClass storage) { return !(word == storage); }
58
59
__inline bool anySet(spv::MemoryAccessMask value, spv::MemoryAccessMask mask)
60
{
61
return (value & mask) != spv::MemoryAccessMask::MaskNone;
62
}
63
64
__inline bool anySet(spv::ImageOperandsMask value, spv::ImageOperandsMask mask)
65
{
66
return (value & mask) != spv::ImageOperandsMask::MaskNone;
67
}
68
69
__inline bool anySet(spv::MemorySemanticsMask value, spv::MemorySemanticsMask mask)
70
{
71
return (value & mask) != spv::MemorySemanticsMask::MaskNone;
72
}
73
74
__inline void addMask(uint32_t& word, spv::TensorAddressingOperandsMask mask) { word |= (unsigned)mask; }
75
76
__inline void addMask(spv::CooperativeMatrixOperandsMask& word, spv::CooperativeMatrixOperandsMask mask)
77
{
78
word = word | mask;
79
}
80
81
template<typename Enum, typename To = std::underlying_type_t<Enum>>
82
__inline To enumCast(Enum value)
83
{
84
return static_cast<To>(value);
85
}
86
}
87
88
#endif // spvUtil_H
89
90