1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: demo_CommandList.cpp 4 5 Copyright (C)2009-2012 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 $Rev: 46365 $ 14 *---------------------------------------------------------------------------*/ 15 16 #include "demo/Render/demo_CommandList.h" 17 18 namespace demo 19 { 20 21 /* ------------------------------------------------------------------------ 22 CommandList class member function 23 ------------------------------------------------------------------------ */ 24 CommandList(void)25 CommandList::CommandList(void) : 26 m_InitializeFlag(false), m_SerialRunFlag(false), 27 m_StoreCommandListIndex(0), m_RunningCommandListIndex(0), 28 m_BufferSize(0), m_RequestNum(0) 29 { 30 for (u32 index = 0; index < DEMO_COMMAND_LIST_NUM; index++) 31 { 32 m_CommandListIdArray[index] = 0; 33 } 34 } 35 ~CommandList(void)36 CommandList::~CommandList(void) 37 { 38 Finalize(); 39 } 40 Initialize(const GLsizei bufferSize,const GLsizei requestNum,const bool serialRunMode)41 void CommandList::Initialize(const GLsizei bufferSize, const GLsizei requestNum, 42 const bool serialRunMode) 43 { 44 if ( ! m_InitializeFlag ) 45 { 46 DEMO_ASSERT_GL_ERROR(); 47 48 m_StoreCommandListIndex = 0; 49 m_RunningCommandListIndex = 0; 50 51 m_BufferSize = bufferSize; 52 m_RequestNum = requestNum; 53 54 nngxGenCmdlists(DEMO_COMMAND_LIST_NUM, &m_CommandListIdArray[0]); 55 for (u32 index = 0; index < DEMO_COMMAND_LIST_NUM; index++) 56 { 57 GLuint id = m_CommandListIdArray[index]; 58 nngxBindCmdlist(id); 59 nngxCmdlistStorage(m_BufferSize, m_RequestNum); 60 DEMO_ASSERT_GL_ERROR(); 61 62 nngxSetCmdlistParameteri(NN_GX_CMDLIST_RUN_MODE, NN_GX_CMDLIST_SERIAL_RUN); 63 } 64 nngxBindCmdlist( m_CommandListIdArray[m_StoreCommandListIndex] ); 65 DEMO_ASSERT_GL_ERROR(); 66 67 m_SerialRunFlag = serialRunMode; 68 if ( m_SerialRunFlag ) 69 { 70 nngxRunCmdlist(); 71 } 72 else 73 { 74 nngxStopCmdlist(); 75 } 76 DEMO_ASSERT_GL_ERROR(); 77 78 m_InitializeFlag = true; 79 } 80 } 81 Finalize(void)82 void CommandList::Finalize(void) 83 { 84 if ( m_InitializeFlag ) 85 { 86 DEMO_ASSERT_GL_ERROR(); 87 88 Clear(); 89 DEMO_ASSERT_GL_ERROR(); 90 91 nngxDeleteCmdlists(DEMO_COMMAND_LIST_NUM, &m_CommandListIdArray[0]); 92 for (u32 index = 0; index < DEMO_COMMAND_LIST_NUM; index++) 93 { 94 m_CommandListIdArray[index] = 0; 95 } 96 97 DEMO_ASSERT_GL_ERROR(); 98 99 m_InitializeFlag = false; 100 } 101 } 102 Run(void)103 void CommandList::Run(void) 104 { 105 RunSingle(); 106 107 DEMO_ASSERT_GL_ERROR(); 108 } 109 RunSingle(void)110 void CommandList::RunSingle(void) 111 { 112 nngxBindCmdlist( m_CommandListIdArray[m_StoreCommandListIndex] ); 113 nngxSplitDrawCmdlist(); 114 nngxRunCmdlist(); 115 nngxWaitCmdlistDone(); 116 } 117 Swap(void)118 void CommandList::Swap(void) 119 { 120 Clear(); 121 122 if ( m_SerialRunFlag ) 123 { 124 nngxRunCmdlist(); 125 } 126 else 127 { 128 nngxStopCmdlist(); 129 } 130 131 m_RunningCommandListIndex = 0; 132 m_StoreCommandListIndex = 0; 133 } 134 Stop(void)135 void CommandList::Stop(void) 136 { 137 nngxBindCmdlist( m_CommandListIdArray[m_RunningCommandListIndex] ); 138 } 139 Wait(void)140 void CommandList::Wait(void) 141 { 142 nngxBindCmdlist( m_CommandListIdArray[m_RunningCommandListIndex] ); 143 nngxWaitCmdlistDone(); 144 145 if ( m_SerialRunFlag ) 146 { 147 nngxRunCmdlist(); 148 } 149 else 150 { 151 nngxStopCmdlist(); 152 } 153 } 154 Clear(void)155 void CommandList::Clear(void) 156 { 157 nngxBindCmdlist( m_CommandListIdArray[m_RunningCommandListIndex] ); 158 nngxClearCmdlist(); 159 } 160 SetSerialRun(const bool flag)161 void CommandList::SetSerialRun(const bool flag) 162 { 163 m_SerialRunFlag = flag; 164 } 165 166 } 167