| 1154 | } |
| 1155 | |
| 1156 | void Device::endFrame() |
| 1157 | { |
| 1158 | mpRenderContext->submit(); |
| 1159 | |
| 1160 | // Wait on past frames. |
| 1161 | if (mpFrameFence->getSignaledValue() > kInFlightFrameCount) |
| 1162 | mpFrameFence->wait(mpFrameFence->getSignaledValue() - kInFlightFrameCount); |
| 1163 | |
| 1164 | // Flush ray tracing validation if enabled |
| 1165 | flushRaytracingValidation(); |
| 1166 | |
| 1167 | // Switch to next transient resource heap. |
| 1168 | getCurrentTransientResourceHeap()->finish(); |
| 1169 | mCurrentTransientResourceHeapIndex = (mCurrentTransientResourceHeapIndex + 1) % kInFlightFrameCount; |
| 1170 | mpRenderContext->getLowLevelData()->closeCommandBuffer(); |
| 1171 | getCurrentTransientResourceHeap()->synchronizeAndReset(); |
| 1172 | mpRenderContext->getLowLevelData()->openCommandBuffer(); |
| 1173 | |
| 1174 | // Signal frame fence for new frame. |
| 1175 | mpRenderContext->signal(mpFrameFence.get()); |
| 1176 | |
| 1177 | // Release resources from past frames. |
| 1178 | executeDeferredReleases(); |
| 1179 | } |
| 1180 | |
| 1181 | NativeHandle Device::getNativeHandle(uint32_t index) const |
| 1182 | { |