Coverage Report

Created: 2025-07-18 06:38

/src/shaderc/third_party/glslang/SPIRV/spvUtil.h
Line
Count
Source (jump to first uncovered line)
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
0
__inline uint32_t operator&(uint32_t value, spv::MemoryAccessMask mask) { return value & (unsigned)mask; }
46
47
0
__inline bool operator==(uint32_t word, spv::FPEncoding encoding) { return word == (unsigned)encoding; }
48
0
__inline bool operator!=(uint32_t word, spv::FPEncoding encoding) { return !(word == encoding); }
49
50
809
__inline bool operator==(uint32_t word, spv::Decoration decoration) { return word == (unsigned)decoration; }
51
0
__inline bool operator!=(uint32_t word, spv::Decoration decoration) { return !(word == decoration); }
52
53
0
__inline bool operator==(uint32_t word, spv::Op op) { return word == (unsigned)op; }
54
0
__inline bool operator!=(uint32_t word, spv::Op op) { return !(word == op); }
55
56
20.8k
__inline bool operator==(uint32_t word, spv::StorageClass storage) { return word == (unsigned)storage; }
57
20.8k
__inline bool operator!=(uint32_t word, spv::StorageClass storage) { return !(word == storage); }
58
59
__inline bool anySet(spv::MemoryAccessMask value, spv::MemoryAccessMask mask)
60
928
{
61
928
    return (value & mask) != spv::MemoryAccessMask::MaskNone;
62
928
}
63
64
__inline bool anySet(spv::ImageOperandsMask value, spv::ImageOperandsMask mask)
65
2.85k
{
66
2.85k
    return (value & mask) != spv::ImageOperandsMask::MaskNone;
67
2.85k
}
68
69
__inline bool anySet(spv::MemorySemanticsMask value, spv::MemorySemanticsMask mask)
70
2.99k
{
71
2.99k
    return (value & mask) != spv::MemorySemanticsMask::MaskNone;
72
2.99k
}
73
74
0
__inline void addMask(uint32_t& word, spv::TensorAddressingOperandsMask mask) { word |= (unsigned)mask; }
75
76
__inline void addMask(spv::CooperativeMatrixOperandsMask& word, spv::CooperativeMatrixOperandsMask mask)
77
0
{
78
0
    word = word | mask;
79
0
}
80
81
template<typename Enum, typename To = std::underlying_type_t<Enum>>
82
__inline To enumCast(Enum value)
83
2.63M
{
84
2.63M
    return static_cast<To>(value);
85
2.63M
}
86
}
87
88
#endif // spvUtil_H