1 /*========================== begin_copyright_notice ============================
2 
3 Copyright (C) 2017-2021 Intel Corporation
4 
5 SPDX-License-Identifier: MIT
6 
7 ============================= end_copyright_notice ===========================*/
8 
9 #ifndef ContextTypes_h_INCLUDED
10 #define ContextTypes_h_INCLUDED
11 
12 #if defined _USC_
13 #   include "IGC/common/igc_debug.h"
14 #   include "3d/common/iStdLib/types.h"
15 #   include "API/ShaderTypes.h"
16 #else
17 #   include "API/ShaderTypes.h"
18 #endif
19 
20 #include "ErrorCode.h"
21 
22 namespace GHAL3D
23 {
24 
25 /*****************************************************************************\
26 ENUM: GHAL3D_CONTEXT_TYPE
27 \*****************************************************************************/
28 enum GHAL3D_CONTEXT_TYPE
29 {
30     GHAL3D_CONTEXT_IMMEDIATE,
31     GHAL3D_CONTEXT_DEFERRED,
32     NUM_GHAL3D_CONTEXT_TYPES
33 };
34 
35 /*****************************************************************************\
36 ENUM: SHADER_TYPE
37 \*****************************************************************************/
38 #if !defined _USC_ && !defined OPENGL_IMOLA
39 enum SHADER_TYPE
40 {
41     VERTEX_SHADER,
42     GEOMETRY_SHADER,
43     PIXEL_SHADER,
44     HULL_SHADER,
45     DOMAIN_SHADER,
46     COMPUTE_SHADER,
47     NUM_SHADER_TYPES
48 };
49 #endif //!defined(_USC_)
50 
51 #ifndef OPENGL_IMOLA
52 /*****************************************************************************\
53 STRUCT: RETVAL
54 \*****************************************************************************/
55 struct RETVAL
56 {
57     // External values
58     DWORD       Success             : 1;    // Call was successful
59     DWORD       Error               : 1;    // Invalid call
60     DWORD       OutOfSystemMemory   : 1;    // System memory allocation failed
61     DWORD       Busy                : 1;    // Compilation not done yet
62     DWORD       _Unused             : 28;   // Reserved // For GCC 4.7 bug (do not allow to static initialize anonymous members)
63 
64     RETVAL& operator = (const ErrorCode&);
65     operator ErrorCode();                   // convertion operator to ErrorCode API type
66 };
67 
68 static_assert(sizeof(RETVAL) == sizeof(ErrorCode));
69 
70 
71 inline RETVAL& RETVAL::operator = (const ErrorCode& errorCode)
72 {
73     Success            = errorCode.Success;
74     Error              = errorCode.Error;
75     OutOfSystemMemory  = errorCode.OutOfSystemMemory;
76     Busy               = errorCode.Busy;
77 
78     return *this;
79 }
80 
ErrorCode()81 inline RETVAL::operator ErrorCode()
82 {
83     return * reinterpret_cast<ErrorCode*>(this);
84 }
85 
86 /*****************************************************************************\
87 CONST: g_cInitRetVal
88 \*****************************************************************************/
89 const RETVAL g_cInitRetVal =
90 {
91     true,   // Success
92     false,  // Error
93     false,  // OutOfSystemMemory
94     false,  // Busy
95 };
96 
97 static_assert(sizeof(g_cInitRetVal) == sizeof(g_cInitErrorCode));
98 
99 #endif
100 
101 /*****************************************************************************\
102 TYPEDEF: HANDLE_TYPE
103 \*****************************************************************************/
104 struct HANDLE_TYPE
105 {
106     void*   handle;
107 
108     bool operator == ( const HANDLE_TYPE& rvalue ) const;
109     bool operator != ( const HANDLE_TYPE& rvalue ) const;
110 };
111 
112 inline bool HANDLE_TYPE::operator == ( const HANDLE_TYPE& rvalue ) const
113 {
114     return handle == rvalue.handle;
115 };
116 
117 inline bool HANDLE_TYPE::operator != ( const HANDLE_TYPE& rvalue ) const
118 {
119     return handle != rvalue.handle;
120 }
121 
122 /*****************************************************************************\
123 TYPEDEF: STATE_HANDLE
124 \*****************************************************************************/
125 typedef HANDLE_TYPE   STATE_HANDLE;
126 
127 /*****************************************************************************\
128 CONST: DISABLE_HANDLE
129 \*****************************************************************************/
130 const HANDLE_TYPE DISABLE_HANDLE = { 0 };
131 
132 } // namespace GHAL3D
133 
134 #endif //ContextTypes_h_INCLUDED
135