1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: gd_System.h 4 5 Copyright (C)2011 Nintendo Co., Ltd. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 *---------------------------------------------------------------------------*/ 14 #ifndef NN_GD_CTR_GD_SYSTEM_H_ 15 #define NN_GD_CTR_GD_SYSTEM_H_ 16 17 #include <nn/gd/CTR/gd_Types.h> 18 #include <nn/gd/CTR/gd_Result.h> 19 20 #if NN_GD_DOCUMENT_TYPE == ENGLISH 21 /* Please see man pages for details 22 23 */ 24 #else 25 /* Please see man pages for details 26 27 */ 28 #endif 29 30 #ifndef NN_UNUSED_VAR 31 #if NN_GD_DOCUMENT_TYPE == ENGLISH 32 /* Please see man pages for details */ 33 #else 34 /* Please see man pages for details */ 35 #endif 36 #define NN_UNUSED_VAR(var) ((void)&var); 37 #endif 38 39 #if NN_GD_DOCUMENT_TYPE == ENGLISH 40 /* Please see man pages for details 41 42 43 */ 44 #else 45 /* Please see man pages for details 46 47 48 */ 49 #endif 50 typedef void (*gdCallbackfunctionErrorPtr)(nnResult result, const char* functionName); 51 52 namespace nn { 53 namespace gd { 54 namespace CTR { 55 56 #if NN_GD_DOCUMENT_TYPE == ENGLISH 57 /* Please see man pages for details 58 */ 59 #else 60 /* Please see man pages for details 61 */ 62 #endif 63 class RecordedPacketId; 64 65 #if NN_GD_DOCUMENT_TYPE == ENGLISH 66 /* Please see man pages for details 67 68 69 */ 70 /* */ // defgroup systemFunction 71 #else 72 /* Please see man pages for details 73 74 75 */ 76 /* */ // defgroup systemFunction 77 #endif 78 79 #if NN_GD_DOCUMENT_TYPE == ENGLISH 80 /* Please see man pages for details 81 82 83 84 85 */ 86 #else 87 /* Please see man pages for details 88 89 90 91 92 */ 93 #endif 94 class System 95 { 96 public: 97 98 #if NN_GD_DOCUMENT_TYPE == ENGLISH 99 /* Please see man pages for details */ 100 #else 101 /* Please see man pages for details */ 102 #endif 103 enum Module 104 { 105 MODULE_RASTERIZER = 1 << 0, 106 MODULE_LIGHTING = 1 << 1, 107 MODULE_FRAMEBUFFER = 1 << 2, 108 MODULE_TEXTURE_COMBINER = 1 << 3, 109 MODULE_GAS_FOG = 1 << 4, 110 MODULE_FRAGMENT_OPERATION = 1 << 5, 111 MODULE_TEXTURE = 1 << 6, 112 MODULE_TEXTURE_PROCEDURAL = 1 << 7, 113 MODULE_VERTEX_INPUT = 1 << 8, 114 MODULE_SHADER = 1 << 9, 115 116 MODULE_ALL = 0x7fffffff 117 }; 118 119 #if NN_GD_DOCUMENT_TYPE == ENGLISH 120 /* Please see man pages for details 121 122 */ 123 #else 124 /* Please see man pages for details 125 126 */ 127 #endif 128 static void SetCallbackFunctionError(gdCallbackfunctionErrorPtr callbackFunctionError); 129 130 #if NN_GD_DOCUMENT_TYPE == ENGLISH 131 /* Please see man pages for details 132 133 134 */ 135 #else 136 /* Please see man pages for details 137 138 139 140 141 142 */ 143 #endif 144 static char* GetErrorStringFromResult(nnResult result); 145 146 #if NN_GD_DOCUMENT_TYPE == ENGLISH 147 /* Please see man pages for details 148 149 150 */ 151 #else 152 /* Please see man pages for details 153 154 155 156 157 158 159 160 */ 161 #endif 162 static nnResult Initialize(); 163 164 #if NN_GD_DOCUMENT_TYPE == ENGLISH 165 /* Please see man pages for details 166 167 168 */ 169 #else 170 /* Please see man pages for details 171 172 173 */ 174 #endif 175 static void Finalize(); 176 177 #if NN_GD_DOCUMENT_TYPE == ENGLISH 178 /* Please see man pages for details 179 */ 180 #else 181 /* Please see man pages for details 182 */ 183 #endif 184 static void ForceDirty(u32 flag); 185 186 #if NN_GD_DOCUMENT_TYPE == ENGLISH 187 /* Please see man pages for details 188 */ 189 #else 190 /* Please see man pages for details 191 */ 192 #endif 193 static void SetDefault(u32 flag); 194 195 #if NN_GD_DOCUMENT_TYPE == ENGLISH 196 /* Please see man pages for details 197 198 199 */ 200 #else 201 /* Please see man pages for details 202 203 204 */ 205 #endif 206 static void Draw(u32 vertexCount, u32 startVertexLocation); 207 208 #if NN_GD_DOCUMENT_TYPE == ENGLISH 209 /* Please see man pages for details 210 211 212 */ 213 #else 214 /* Please see man pages for details 215 216 217 */ 218 #endif 219 static void DrawIndexed(u32 indexCount, u32 startIndexLocation); 220 221 #if NN_GD_DOCUMENT_TYPE == ENGLISH 222 /* Please see man pages for details 223 */ 224 #else 225 /* Please see man pages for details 226 */ 227 #endif 228 static void Execute3DCommandList(); 229 230 #if NN_GD_DOCUMENT_TYPE == ENGLISH 231 /* Please see man pages for details 232 233 234 235 236 237 238 239 */ 240 #else 241 /* Please see man pages for details 242 243 244 245 246 247 248 249 250 251 252 253 254 */ 255 #endif 256 static nnResult StartRecordingPackets(u32* forceDirtyModuleFlag); 257 258 #if NN_GD_DOCUMENT_TYPE == ENGLISH 259 /* Please see man pages for details 260 261 262 263 */ 264 #else 265 /* Please see man pages for details 266 267 268 269 270 271 272 273 274 275 276 277 */ 278 #endif 279 static nnResult GetCommandBufferOffset(u32* offset); 280 281 #if NN_GD_DOCUMENT_TYPE == ENGLISH 282 /* Please see man pages for details 283 284 285 286 287 288 */ 289 #else 290 /* Please see man pages for details 291 292 293 294 295 296 297 298 299 300 301 */ 302 #endif 303 static nnResult GetCommandBufferBaseAddress(RecordedPacketId* packetId, u32** commandBufferAddr); 304 305 #if NN_GD_DOCUMENT_TYPE == ENGLISH 306 /* Please see man pages for details 307 308 309 310 */ 311 #else 312 /* Please see man pages for details 313 314 315 316 317 318 319 320 321 322 323 324 325 */ 326 #endif 327 static nnResult StopRecordingPackets(RecordedPacketId** packetId); 328 329 #if NN_GD_DOCUMENT_TYPE == ENGLISH 330 /* Please see man pages for details 331 332 333 334 335 336 337 338 339 */ 340 #else 341 /* Please see man pages for details 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 */ 357 #endif 358 static nnResult ReplayPackets(RecordedPacketId* packetId, u32* forceDirtyModuleFlag); 359 360 #if NN_GD_DOCUMENT_TYPE == ENGLISH 361 /* Please see man pages for details 362 363 */ 364 #else 365 /* Please see man pages for details 366 367 368 369 370 371 */ 372 #endif 373 static nnResult ReleasePackets(RecordedPacketId* packetId); 374 375 376 }; // System 377 378 /* */ // addtogroup systemFunction 379 380 } // namespace CTR 381 } // namespace gd 382 } // namespace nn 383 384 385 #endif // NN_GD_CTR_GD_SYSTEM_H_ 386