OROCHI
 
Loading...
Searching...
No Matches
GxRenderDevice.h
Go to the documentation of this file.
1//===========================================================================
10//===========================================================================
11#pragma once
12
13// 定数バッファを共有する。Windows のみ動作確認済み
14#define GX_ENABLE_DX11_SHARED_CONSTANTBUFFER 0
15
16GX_CORE_NAMESPACE_BEGIN()
17
18class GxSysRenderBase;
19class GxRenderContext;
27class GxRenderTexture;
29class GxRenderQuery;
31
32//===========================================================================
39//===========================================================================
40typedef u32 (*GX_RENDERDEVICE_ERROR_FUNCTION)(GX_CSTR message, u32 returnValue, u32 errorId, u32 value);
41
42//===========================================================================
44//===========================================================================
46{
47 //-----------------------------------------------------------
49 //-----------------------------------------------------------
51public:
52 // RTTI定義
54 // GxClassBase継承クラス用禁止宣言
56
57
58 //-------------------------------------------------------------
60 //-------------------------------------------------------------
62#if GX_ENABLE_NEO
64 class GxRenderDeviceNeoInitialInformation : public GxClassBase
65 {
66 //-----------------------------------------------------------
68 //-----------------------------------------------------------
70public:
71 // RTTI定義
72 GX_RTTI_ABSTRACT_CLASS(GxRenderDeviceNeoInitialInformation, GxClassBase)
73 // GxClassBase継承クラス用禁止宣言
74 GX_PROHIBIT_CLASS_BASE(GxRenderDeviceNeoInitialInformation)
75
76
77 //-------------------------------------------------------------
79 //-------------------------------------------------------------
81
83 GxRenderDeviceNeoInitialInformation(void) : _neoRenderMode(GX_NEO_RENDER_MODE::NONE){}
84
86 //-------------------------------------------------------------
88 //-------------------------------------------------------------
90
92 GX_FORCE_INLINE void loadJson(const GxJson::GxJsonNode& jsonNode)
93 {
94 _neoRenderMode = static_cast<GX_NEO_RENDER_MODE>(jsonNode.getS32("_neoRenderMode", static_cast<s32>(_neoRenderMode)));
95 }
96
98 //-------------------------------------------------------------
100 //-------------------------------------------------------------
102
103 GX_NEO_RENDER_MODE _neoRenderMode;
104
106 };
107#endif // GX_ENABLE_NEO
108
111 {
112 //-------------------------------------------------------------
114 //-------------------------------------------------------------
116
120 GxRawAllocatorInfo(u64 size, u32 blockCount)
121 : _size(size)
122 , _maxBlockCount(blockCount)
123 {}
124
126 //-------------------------------------------------------------
128 //-------------------------------------------------------------
130
132 constexpr void setSize(u64 size, u32 maxBlockCount)
133 {
134 _size = size;
135 _maxBlockCount = maxBlockCount;
136 }
137
139 //-------------------------------------------------------------
141 //-------------------------------------------------------------
143
144 u64 _size;
146
148 };
149
151 //-------------------------------------------------------------
153 //-------------------------------------------------------------
155
158
160 //-------------------------------------------------------------
162 //-------------------------------------------------------------
164
166 void loadJson(const GxJson::GxJsonNode& jsonNode);
167
168#if GX_DEVELOP
170 static GxGuiBase* createGui(GxProperty& property, GxTypedObject* pOwner, const GxRtti& rtti, u32 index);
171#endif // GX_DEVELOP
172
174 //-------------------------------------------------------------
176 //-------------------------------------------------------------
178
192 u32 _maxSkinningJointCount; //<! スキニングで使用できるジョイントの最大数
193#if GX_DEVELOP
194 b32 _enableWarningShaderCompile;
195#endif // GX_DEVELOP
196#if defined(_WINDOWS) || defined(_PS4) || defined(_PS5) || defined(_XBOX_XS)
197 u32 _useTexcoordCount;
198 GxSize _backBufferResolution;
199#if GX_DEVELOP
200 b32 _disableSrgbTextureDevelop;
201#endif // GX_DEVELOP
202#endif //_WINDOWS || _PS4 || _PS5 || _XBOX_XS
203#if defined(_PS4) || defined(_PS5) || defined(_NX64)
204 u64 _mainMemorySize;
205 u64 _localMemorySize;
206#endif //_PS4 || _PS5 || _NX64
207#if defined(_PS4) || defined(_PS5)
208 b32 _useDefaultPoolForRenderResources;
209
210 u32 _useMemArenaSize;
211 u32 _useMemArenaElementsCount;
212 u32 _useMemArenaPoolElementSize;
213 f32 _useMemArenaPoolElementsAssign;
214#if GX_ENABLE_LCUE
215 u32 _useCommandBufferAdditionalResourceBufferSize;
216#else // GX_ENABLE_LCUE
217 u32 _useCommandBufferAdditionalCueHeapSize;
218#endif // !GX_ENABLE_LCUE
219
220#if GX_ENABLE_NEO
221 GxRenderDeviceNeoInitialInformation _neoInitialInformation;
222#endif // GX_ENABLE_NEO
223 b32 _enableHDRMonitor;
224#endif // _PS4 || _PS5
225#if GX_USE_DX11 || GX_USE_DX12
226 b32 _enableContextFlush;
227 u32 _useShaderModel;
228#endif //GX_USE_DX11 || GX_USE_DX12
229#if GX_USE_DX12
230 b32 _enableRenderDeviceDebugLayer;
231#endif //GX_USE_DX12
232#if defined(_WINDOWS)
233 b32 _isFullScreen;
234 b32 _isFullScreenReady;
235 u32 _fullScreenScalingMode;
236 b32 _enableWindowResizeCheck;
237 GxSize _fullScreenResolution;
238 b32 _useDefaultPoolForRenderResources;
239 u32 _useDisplayDeviceIndex;
240 u32 _useDxFeatureLevel;
241 b32 _useAltEnterKeyFullScreen;
242 b32 _usePrintScreenKey;
243#elif defined(_NX64)
244 GxSize _maxBackBufferResolution;
245 GxSize _defaultBackBufferResolution;
246 u32 _graphicsMemorySize;
247 u32 _firmwareMemorySize;
248 s32 _deviceFlags;
249 u32 _texturePoolCount;
250 u32 _samplerPoolCount;
251 u32 _nativeCommandBufferSize;
252 u32 _controlBufferSize;
253 u32 _uniformBlockBufferSize;
254 u32 _gpuFrameworkType;
255 u32 _shaderScratchMemorySize;
256 GxRawAllocatorInfo _shaderPoolAllocator;
257 GxRawAllocatorInfo _commonPoolAllocator;
258#elif defined(_PS5)
259 u32 _constBufferSize;
260#endif //_PS5
261
263};
264
265#if GX_USE_DX11
266//===========================================================================
268//===========================================================================
269template<class STATE, class DESC>
270struct GxD3D11CreateStateFunction
271{
272 typedef HRESULT (STDMETHODCALLTYPE ID3D11Device::*type)(const DESC*, STATE**);
273};
274
275//===========================================================================
277//===========================================================================
278template<class STATE, class DESC, typename GxD3D11CreateStateFunction<STATE,DESC>::type CREATE_STATE>
279class GxD3D11StateTable
280{
281 //-------------------------------------------------------------
283 //-------------------------------------------------------------
285private:
287 struct GxD3D11StateEntry
288 {
289 u32 _hash;
290 DESC _desc;
291 STATE* _pState;
292 };
293
295 //-------------------------------------------------------------
297 //-------------------------------------------------------------
299public:
301 GxD3D11StateTable(void);
302
304 void terminate(void);
305
307 ~GxD3D11StateTable(void) {};
308
310 //-------------------------------------------------------------
312 //-------------------------------------------------------------
314
316 STATE* get(const DESC& desc);
317
319 //-------------------------------------------------------------
321 //-------------------------------------------------------------
323private:
324 GxArray _table;
325
327};
328
329//---------------------------------------------------------------------------
330// コンストラクタ
331//---------------------------------------------------------------------------
332template<class STATE, class DESC, typename GxD3D11CreateStateFunction<STATE,DESC>::type CREATE_STATE>
333GxD3D11StateTable<STATE, DESC, CREATE_STATE>::GxD3D11StateTable(void)
334{
335}
336
337//---------------------------------------------------------------------------
338// デストラクタ
339//---------------------------------------------------------------------------
340template<class STATE, class DESC, typename GxD3D11CreateStateFunction<STATE,DESC>::type CREATE_STATE>
341void GxD3D11StateTable<STATE, DESC, CREATE_STATE>::terminate(void)
342{
343 for(u32 i = 0; i < _table.getCount(); i++)
344 {
345 auto* pEntry = static_cast<GxD3D11StateEntry*>(_table[i]);
346 DIRECTX_SAFE_RELEASE(pEntry->_pState);
347 GX_SAFE_FREE_MEMORY(pEntry);
348 }
349}
350
351#if !defined(_PS4)
352//---------------------------------------------------------------------------
353// ステート記述からステートオブジェクトを取得
355//---------------------------------------------------------------------------
356template<class STATE, class DESC, typename GxD3D11CreateStateFunction<STATE,DESC>::type CREATE_STATE>
357STATE* GxD3D11StateTable<STATE, DESC, CREATE_STATE>::get(const DESC& desc)
358{
359 const u32 hash = GxMath::getHash32(const_cast<DESC*>(&desc), sizeof(DESC*));
360
361 for(u32 i = 0; i < _table.getCount(); i++)
362 {
363 auto* pEntry = static_cast<GxD3D11StateEntry*>(_table[i]);
364 if( (pEntry->_hash == hash) && (GX_MEMCMP(&pEntry->_desc, &desc, sizeof(desc)) == 0) )
365 {
366 return pEntry->_pState;
367 }
368 }
369
370 auto* pEntry = static_cast<GxD3D11StateEntry*>(GX_ALLOCATE_MEMORY(getGxAllocatorList(GxAllocatorList::ALLOCATOR_TYPE::RENDER), sizeof(GxD3D11StateEntry)));
371 {
372 pEntry->_hash = hash;
373 pEntry->_desc = desc;
374 (getGxRenderDevice()->getDevice()->*CREATE_STATE)(&pEntry->_desc, &pEntry->_pState);
375 }
376 _table.addBottom(pEntry);
377 return pEntry->_pState;
378}
379#endif
380
381//---------------------------------------------------------------------------
382// 各種ステートテーブルのtypedef
383//---------------------------------------------------------------------------
384using GxD3D11SamplerStateTable = GxD3D11StateTable<ID3D11SamplerState, D3D11_SAMPLER_DESC, &ID3D11Device::CreateSamplerState>;
385using GxD3D11RasterizerStateTable = GxD3D11StateTable<ID3D11RasterizerState, D3D11_RASTERIZER_DESC, &ID3D11Device::CreateRasterizerState>;
386using GxD3D11DepthStencilStateTable = GxD3D11StateTable<ID3D11DepthStencilState, D3D11_DEPTH_STENCIL_DESC, &ID3D11Device::CreateDepthStencilState>;
387using GxD3D11BlendStateTable = GxD3D11StateTable<ID3D11BlendState, D3D11_BLEND_DESC, &ID3D11Device::CreateBlendState>;
388
389//===========================================================================
391//===========================================================================
392class GxRenderShaderConstantPool : public GxClassBase
393{
394 //-------------------------------------------------------------
396 //-------------------------------------------------------------
398public:
399 // RTTI定義
400 GX_RTTI_CLASS(GxRenderShaderConstantPool, GxClassBase)
401 // new, delete定義
402 GX_OPERATOR_NEW_DELETE(GxAllocatorList::ALLOCATOR_TYPE::RENDER)
403
404
405 //-------------------------------------------------------------
407 //-------------------------------------------------------------
409
411 GxRenderShaderConstantPool( void );
412
414 ~GxRenderShaderConstantPool( void ) override {};
415
417 b32 initialize( u32 initalItemNum );
418
420 void terminate(void);
421
423 //-------------------------------------------------------------
425 //-------------------------------------------------------------
427
429 ID3D11Buffer* allocateSharedBuffer(u32 bufferSize);
430
432 //-------------------------------------------------------------
434 //-------------------------------------------------------------
436private:
437 ID3D11Buffer** _ppBuffer;
438 u32 _size;
439 u32 _maxSize;
440
442};
443#endif // GX_USE_DX11
444
445//===========================================================================
448//===========================================================================
449class GxRenderDevice : public GxClassBase, public SingletonBase<GxRenderDevice>
450{
451 //-------------------------------------------------------------
453 //-------------------------------------------------------------
455public:
456 GX_RTTI_ABSTRACT_CLASS(GxRenderDevice, GxClassBase)
457 // GxClassBase継承クラス用禁止宣言
459 // new, delete定義
460 GX_OPERATOR_NEW_DELETE(GxAllocatorList::ALLOCATOR_TYPE::RENDER)
461
462 friend class GxSysRenderBase;
463 friend class GxRenderContext;
464 friend class GxRenderNotifier;
465 friend class GxRenderNotifierForOnRender;
466 friend class GxRenderResource;
467 friend class GxRenderTexture;
468 friend class GxRenderVertexDeclaration;
469 class GxVramAllocator;
470 class GxRawAllocator;
471
472protected:
473 class GxRenderThread;
474private:
476
477public:
480 {
481 union
482 {
483 struct
484 {
489 };
491 };
492 };
493
494protected:
495
497 {
498 public:
499 using priorityType = u64;
501 static constexpr GxPriority::priorityType priorityValueMax = U64_MAX;
502
505 {
506 struct
507 {
508#if GX_BITFIELD_LITTLEENDIAN
509 u32 _subPriority:20;
513 u32 _reserved:28;
514#else //GX_BITFIELD_LITTLEENDIAN
515 u32 _reserved:28;
520#endif // !GX_BITFIELD_LITTLEENDIAN
521 };
522 priorityType _priorityValue;
523 };
524 };
525
527 enum class COMMAND_TYPE
528 {
539 DRAW,
543#if GX_ENABLE_COMPUTE_SHADER
544 DISPATCH,
545#endif //GX_ENABLE_COMPUTE_SHADER
546#if GX_ENABLE_OCCLUSION_CULLING
547 RESOLVE_OCCLUSION_QUERY,
548#endif //GX_ENABLE_OCCLUSION_CULLING
549 CLEAR,
550 CLEAR_HDR,
556#if GX_ENABLE_HTILE_STENCIL_MASK
557 MASK_HTILE_STENCIL_REGION,
558#endif // GX_ENABLE_HTILE_STENCIL_MASK
559#if defined(_NX64)
560 SET_TILED_CACHE_ACTION,
561 SET_TILED_CACHE_TILE_SIZE,
562 SAVE_ZCULL_DATA,
563 RESTORE_ZCULL_DATA,
564 RESERVE4,
565#else //_NX64
566 RESERVE0,
567 RESERVE1,
568 RESERVE2,
569 RESERVE3,
570 RESERVE4,
571#endif // !_NX64
572#if GX_DEVELOP
573 BEGIN_MARKER,
574 END_MARKER,
575#else //GX_DEVELOP
576 RESERVE5,
577 RESERVE6,
578#endif // !GX_DEVELOP
579 CALLBACK_,
583 MAX,
584 };
585
588 {
590 f32 _nearZ;
591 f32 _farZ;
592 };
593
594public: // GxSysRenderから読みたいので仮でpublic
596 struct GxCaps
597 {
599 enum class GPU_TYPE
600 {
601 UNKNOWN,
602 GEFORCE,
603 RADEON,
604 };
605
609 };
610
611protected:
612#if GX_USE_DX11
614 struct GxD3D11State
615 {
616 ID3D11InputLayout* _pInputLayout;
617
618 struct
619 {
620 ID3D11Buffer* _pVertexBuffers[RENDER_VERTEX_STREAM_COUNT_MAX];
621 UINT _strides[RENDER_VERTEX_STREAM_COUNT_MAX];
622 UINT _offsets[RENDER_VERTEX_STREAM_COUNT_MAX];
623 } _vertexBuffers;
624 b32 _isVertexBuffersDirty;
625
626 struct
627 {
628 ID3D11Buffer* _pIndexBuffer;
629 DXGI_FORMAT _format;
630 UINT _offset;
631 } _indexBuffer;
632 b32 _isIndexBufferDirty;
633
634 D3D11_PRIMITIVE_TOPOLOGY _primitiveTopology;
635 D3D11_RASTERIZER_DESC _rasterizerState;
636 b32 _rasterizerStateDirty;
637
638 ID3D11ShaderResourceView* _pShaderResources[static_cast<u32>(RENDER_SHADER::MAX)][RENDER_TEXTURE_SAMPLER_COUNT_MAX];
639 b32 _shaderResourcesDirty[static_cast<u32>(RENDER_SHADER::MAX)];
640 ID3D11UnorderedAccessView* _pUnorderedAccess[static_cast<u32>(RENDER_SHADER::MAX)][RENDER_TEXTURE_SAMPLER_COUNT_MAX];
641 b32 _unorderedAccessDirty[static_cast<u32>(RENDER_SHADER::MAX)];
642 ID3D11SamplerState* _pSamplers[static_cast<u32>(RENDER_SHADER::MAX)][D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT];
643 b32 _samplersDirty[static_cast<u32>(RENDER_SHADER::MAX)];
644 ID3D11Buffer* _pConstantBuffers[static_cast<u32>(RENDER_SHADER::MAX)][D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT];
645 b32 _constantBuffersDirty[static_cast<u32>(RENDER_SHADER::MAX)];
646
647 struct
648 {
649 D3D11_BLEND_DESC _blendState;
650 FLOAT _blendFactor[4];
651 UINT _sampleMask;
652 } _blendState;
653 b32 _blendStateDirty;
654
655 struct
656 {
657 D3D11_DEPTH_STENCIL_DESC _depthStencilState;
658 UINT _stencilReference;
659 BOOL _stencilTwoSideEnable;
660 } _depthStencilState;
661 b32 _depthStencilStateDirty;
662
663 struct
664 {
665 ID3D11RenderTargetView* _pRenderTargetViews[RENDER_TARGET_COUNT_MAX];
666 ID3D11DepthStencilView* _pDepthStencilView;
667 } _renderTargets;
668 b32 _renderTargetsDirty;
669 };
670#endif // GX_USE_DX11
671
672 struct GxCommandInformation;
673 struct GxPacket;
674 struct GxDrawCommandCommonInformation;
675 struct GxRegisterInformation;
676 struct GxRegisterSet;
677#if GX_USE_OPENGL
679 struct GxRegisterBlockInformation
680 {
681 void* _pBuffer;
682 u32 _blockSize;
683 };
684#endif //GX_USE_OPENGL
685 struct GxCommandSetRenderState;
686 struct GxCommandSetDepthTestState;
687 struct GxCommandSetStencilTestState;
688 struct GxCommandSetAlphaTestState;
689 struct GxCommandSetBlendState;
690 struct GxCommandSetViewport;
691 struct GxCommandSetScissorRect;
692 struct GxCommandSetRenderTarget;
693 struct GxCommandSetDepthStencil;
694 struct GxCommandForceDrawState;
695 struct GxCommandForceVertexStreamState;
696 struct GxCommandDraw;
697 struct GxCommandDrawIndexed;
698 struct GxCommandDrawMemory;
699 struct GxCommandDrawIndexedMemory;
700#if GX_ENABLE_COMPUTE_SHADER
701 struct GxCommandDispatch;
702#endif //GX_ENABLE_COMPUTE_SHADER
703#if GX_ENABLE_OCCLUSION_CULLING
704 struct GxCommandResolveOcclusionQuery;
705#endif //GX_ENABLE_OCCLUSION_CULLING
706 struct GxCommandClear;
707 struct GxCommandClearHDR;
708 struct GxCommandCopyRenderTargetToTexture;
709 struct GxCommandCopyDepthStencilToTexture;
710 struct GxCommandCopyRenderTargetToTextureStretch;
711 struct GxCommandCopyDepthStencilToTextureStretch;
712 struct GxCommandCopyRenderTargetToTextureWithMipmap;
713 struct GxCommandAssembleFinalVrImage;
714 struct GxCommandBeginMarker;
715 struct GxCommandEndMarker;
716 struct GxCommandCallback;
717 struct GxCommandCallbackCopy;
718 struct GxCommandSetPredication;
719#if defined(_NX64)
720 struct GxCommandSetTiledCacheAction;
721 struct GxCommandSetTiledCacheTileSize;
722 struct GxCommandSaveZCullData;
723 struct GxCommandRestoreZCullData;
724#endif //_NX64
725
726#if GX_ENABLE_HTILE_STENCIL_MASK
727 struct GxCommandMaskHtileStencilRegion;
728#endif // GX_ENABLE_HTILE_STENCIL_MASK
729
731 static constexpr u32 CACHE_INVALIDATE_VALUE = 0x8B8B8B8BUL;
734
735#if GX_DEVELOP
736public:
738 struct GxPerformanceCounter : public GxStructBase
739 {
740 //-------------------------------------------------------------
742 //-------------------------------------------------------------
744 public:
745 GX_RTTI_STRUCT(GxPerformanceCounter)
746
747
748 //-------------------------------------------------------------
750 //-------------------------------------------------------------
752
753 u32 _renderPoint;
754 u32 _renderLine;
755 u32 _renderTriangle;
756 u32 _renderVertex;
757 u32 _renderCall;
758
760 };
761
763 struct GxPerformanceCounterView : public GxStructBase
764 {
765 //-------------------------------------------------------------
767 //-------------------------------------------------------------
769 public:
770 GX_RTTI_STRUCT(GxPerformanceCounterView)
771
772
773 //-------------------------------------------------------------
775 //-------------------------------------------------------------
777
778 GxPerformanceCounter _subView[static_cast<s32>(RENDER_SUB_VIEW::MAX)];
779
780 u32 _renderPoint;
781 u32 _renderLine;
782 u32 _renderTriangle;
783 u32 _renderVertex;
784 u32 _renderCall;
785
787 };
788
789protected:
791 class GxScreenshotStateStore
792 {
793 //-------------------------------------------------------------
795 //-------------------------------------------------------------
797 public:
799 void store(void);
801 void restore(void);
802
804 //-------------------------------------------------------------
806 //-------------------------------------------------------------
808 private:
809 b32 _useRenderThread;
810 b32 _enableFrameSkip;
811 b32 _enableCpuRenderSkip;
812
814 };
815#endif // GX_DEVELOP
816
817#if defined(_WINDOWS)
818public:
820 struct GxDisplayConfig
821 {
822 GxSize _outputResolution;
823 GxSize _innerResolution;
824 GxSize _filterResolution;
825 b32 _isFilterAntialias;
826 b32 _isFullScreen;
827 };
828
830 enum class DISPLAY_CONFIG
831 {
832 OK = 0,
833 INVALID_WINDOW_RESOLUTION,
834 INVALID_DISPLAY_RESOLUTION,
835 IS_NOT_FULLSCREEN_READY,
836 IS_NOT_READY,
837 };
838
840 struct GxDisplayDeviceInformation : public GxStructBase
841 {
842 //-------------------------------------------------------------
844 //-------------------------------------------------------------
846
847 friend class GxRenderDevice;
848 GX_RTTI_STRUCT(GxDisplayDeviceInformation)
849
850
851 //-------------------------------------------------------------
853 //-------------------------------------------------------------
855 public:
857 GxDisplayDeviceInformation(void)
858 : _isUsing(false)
859 , _displayReady(false)
860 , _videoMemorySize(0)
861 , _systemMemorySize(0)
862 , _sharedMemorySize(0)
863 , _pAdapter(nullptr)
864 {}
865
867 //-------------------------------------------------------------
869 //-------------------------------------------------------------
871
872 GxString _deviceName;
873 b32 _isUsing;
874 b32 _displayReady;
875 u64 _videoMemorySize;
876 u64 _systemMemorySize;
877 u64 _sharedMemorySize;
878 private:
879 void* _pAdapter;
880
882 };
883#endif //_WINDOWS
884
885#if defined(_NX64)
886public:
888 enum class MEMORY_POOL_TYPE
889 {
890 COMMAND_BUFFER = 1,
891 VERTEX_DEFAULT,
892 TEXTURE_POOL,
893 TEXTURE_DEFAULT,
894 COMMON_DEFAULT,
895 GPU_DEFAULT,
896 TEXTURE_RENDER_TARGET,
897 SHADER_CODE,
898 };
899
901 enum DIRTY_STATE
902 {
903 DIRTY_STATE_RENDER_TARGET = (1 << 0),
904 DIRTY_STATE_POLYGON_STATE = (1 << 1),
905 DIRTY_STATE_POLYGON_OFFSET = (1 << 2),
906 DIRTY_STATE_MULTI_SAMPLE_STATE = (1 << 3),
907 DIRTY_STATE_DEPTH_STENCIL_STATE = (1 << 4),
908 DIRTY_STATE_STENCIL_VALUE_INITIALIZE = (1 << 5),
909 DIRTY_STATE_VIEWPORT_INITIALIZE = (1 << 6),
910 DIRTY_STATE_SCISSOR_INITIALIZE = (1 << 7),
911 DIRTY_STATE_BARRIER = (1 << 8),
912 };
913#endif // _NX64
914
915public:
917 static constexpr u32 FRAME_TIME_LOG_COUNT = (1 << 3);
919 static constexpr u32 FRAME_TIME_LOG_COUNT_I = (1 << 3);
921 static constexpr u32 PACKET_BLOCK_SIZE = GxMath::VALUE_8K;
923 static constexpr u32 COMMAND_BLOCK_SIZE = GxMath::VALUE_32K;
924private:
925#if GX_USE_DX12
926 // パイプラインステート最大数
927 static constexpr u32 PIPELINE_STATE_MAX = GxMath::VALUE_1K;
928#endif //GX_USE_DX12
929
931 //-------------------------------------------------------------
933 //-------------------------------------------------------------
935
936public:
938 GxRenderDevice(void);
940 b32 initialize(const GxRenderDeviceInitialInformation* pInitialInformation);
941private:
942#if GX_USE_DX11 || GX_USE_DX12
944 b32 initializeError(HRESULT hResult, u32 errorPosition);
945#endif //GX_USE_DX11 || GX_USE_DX12
947 b32 initializeInner(const GxRenderDeviceInitialInformation* pInitialInformation);
949#if GX_USE_DX11 || GX_USE_DX12
950 void createSwapChainDesc(DXGI_SWAP_CHAIN_DESC& desc);
951#endif // GX_USE_DX11 || GX_USE_DX12
952
953public:
955 void stopRenderThread(void);
957 void terminate(void);
958
960 b32 loadResource(void);
962 b32 unloadResource(void);
963
964#if GX_DEVELOP
966 GX_FORCE_INLINE void setGpuProfiling( b32 on ){ _enableGpuProfiling = on; }
967#endif //GX_DEVELOP
968
969protected:
971 b32 initializeThreadLocalStorage(u32 workerThreadIndex);
972
973#if GX_DEVELOP
975 static GxGuiBase* createGui(GxProperty& property, GxTypedObject* pOwner, const GxRtti& rtti, u32 index);
977 b32 getResourceTableProperty(GxClassBase*& pOwner, GxProperty*& pProperty);
978public:
980 constexpr GxVramAllocator* getVramAllocator(void) const { return _pVramAllocator; };
981#endif //GX_DEVELOP
982
984 //-------------------------------------------------------------
986 //-------------------------------------------------------------
988public:
990 GX_FORCE_INLINE f32 getElapsedFrameTime(void) const { return _frameRateTimer.getDiff(GxMath::PREFIX::NANO) / 1000.0f / 1000.0f; }
992 constexpr RENDER_FRAME_RATE getFrameRateTarget(void) const { return _frameRateTarget; }
994 f32 getFrameRateTargetF32(void);
998 constexpr f32 getFrameRate(void) const { return _frameRate; }
1000 constexpr f32 getFrameRateAverage(void) const { return _frameRateAverage; }
1002 constexpr f32 getFrameTime(void) const { return _frameTime; }
1004 constexpr f32 getFrameTimeAverage(void) const { return _frameTimeAverage; }
1006 constexpr f32 getGpuFrameTime(void) const { return _gpuFrameTime; }
1008 constexpr u64 getGpuTimeStampFrequency(void) const { return _gpuTimeStampFrequency; }
1010 GX_FORCE_INLINE b32 getFrameAverageAvailable(void) const { return _frameAverageAvailable; }
1011
1012 // FrameSkip
1014 GX_FORCE_INLINE b32 isCpuRenderSkipping(void) const { return false; }
1015
1017 GX_FORCE_INLINE const GxSize& getOutputResolution(void) const { return _outputResolution; }
1018#if defined(_WINDOWS)
1020 GX_FORCE_INLINE void setOutputResolution(const GxSize& resolution) { _outputResolutionRequest = resolution; }
1021#endif //_WINDOWS
1023 GX_FORCE_INLINE const GxRect& getSafetyArea(void) const { return _safetyArea; }
1025 constexpr f32 getAspectRatio(void) const { return _aspectRatio; }
1027 constexpr f32 getGamma(void) const { return _gamma; }
1029 constexpr void setGamma(f32 gamma) { _gamma = gamma; }
1030
1032 constexpr u32 getWriteBuffer(void) const { return _writeBuffer; }
1034 constexpr u32 getRenderBuffer(void) const { return _renderBuffer; }
1035
1037 GX_FORCE_INLINE GxRenderTexture* getTextureByHandle(GX_HANDLE handle) const;
1039 GX_FORCE_INLINE GxRenderTexture* getBackBuffer(void) const
1040 {
1041#if defined(_PS5) || GX_USE_DX12
1042 return _sharedContext[_writeBuffer]._pBackBuffer;
1043#else //_PS5 || GX_USE_DX12
1044 return _pBackBuffer;
1045#endif // !(_PS5 || GX_USE_DX12)
1046 }
1047
1049 GX_FORCE_INLINE const GxString& getDeviceName(void) const { return _deviceName; }
1050
1052 GX_FORCE_INLINE u32 getMaxSkinningJointCount(void);
1053
1054#if GX_USE_DX11 || GX_USE_DX12
1056 GX_FORCE_INLINE GxNativeDevice getDevice(void) const { return _pDevice; }
1058 constexpr GxNativeSwapChain* getSwapChain(void) const { return _pSwapChain; }
1059#if GX_USE_DX11
1061 GX_FORCE_INLINE ID3D11DeviceContext* getD3D11ImmediateContext(void) const { return _pD3D11ImmediateContext; }
1063 ID3D11DeviceContext* lockD3D11ImmediateContext(void);
1065 void unlockD3D11ImmediateContext(void);
1067 ID3D11DeviceContext* lockD3D11DeferredContext(void);
1069 void unlockD3D11DeferredContext(void);
1070#elif GX_USE_DX12
1072 GX_FORCE_INLINE ComPtr<ID3D12GraphicsCommandList> getGraphicsCommandList(void) const { return _pD3D12GraphicsCommandList; }
1074 GX_FORCE_INLINE ComPtr<ID3D12CommandQueue> getCommandQueue(void) const { return _pD3D12CommandQueue; }
1075#if defined(_WINDOWS)
1077 GX_FORCE_INLINE ComPtr<ID3D12Fence> getFence(void) const { return _pD3D12Fence; }
1079 constexpr u64 getFenceValue(u32 bufferIndex) const { return _sharedContext[bufferIndex]._fenceValue; }
1080#endif //_WINDOWS
1082 ComPtr<ID3D12GraphicsCommandList> lockGraphicsCommandListCopy(void);
1084 void unlockGraphicsCommandListCopy(void);
1086 GX_FORCE_INLINE ComPtr<ID3D12CommandAllocator> getCommandAllocatorCopy(void) const { return _pD3DCommandAllocatorCopy; }
1088#if defined(_XBOX_XS)
1089 GX_FORCE_INLINE ComPtr<ID3D12CommandQueue> getCommandQueueCopy(void) const { return _pD3D12CommandQueue; }
1090#else //_XBOX_XS
1091 GX_FORCE_INLINE ComPtr<ID3D12CommandQueue> getCommandQueueCopy(void) const { return _pD3D12CommandQueueCopy; }
1092#endif // !_XBOX_XS
1094 u32 createShaderResourceView(ID3D12Resource* pResource, const D3D12_SHADER_RESOURCE_VIEW_DESC& desc);
1096 u32 createUnorderedAccessView(ID3D12Resource* pResource, const D3D12_UNORDERED_ACCESS_VIEW_DESC& desc);
1097private:
1099 b32 barrierTexture(GxRenderTexture* pTexture, D3D12_RESOURCE_STATES beforeState, D3D12_RESOURCE_STATES afterState);
1101 GX_FORCE_INLINE b32 isSupportMeshShader(void) const { return _featureLevelOptions7.MeshShaderTier != D3D12_MESH_SHADER_TIER_NOT_SUPPORTED; }
1102#if GX_DEVELOP
1104 void outputDeviceRemovedExtendedData(void) const;
1105#endif //GX_DEVELOP
1106public:
1107#endif //GX_USE_DX12
1108#if defined(_WINDOWS)
1110 void resetContext(void);
1111#endif //_WINDOWS
1112#if GX_EDITOR
1114 GxNativeSwapChain* createSwapChain(HWND hwnd);
1116 void deleteSwapChain(GxNativeSwapChain* pSwapChain);
1117#endif //GX_EDITOR
1119 GX_FORCE_INLINE b32 getVBlankWait(void) const { return _forceVBlankWait; }
1121 GX_FORCE_INLINE void setVBlankWait(b32 vblank) { _forceVBlankWait = vblank; }
1122
1123private:
1124#if GX_EDITOR
1126 IDXGIFactory* getDXGIFactory(void) const;
1127#endif //GX_EDITOR
1128#endif // GX_USE_DX11 || GX_USE_DX12
1129
1130public:
1131#if defined(_PS5)
1133 GX_FORCE_INLINE GxNativeRenderContext* getRenderContext(u32 bufferIndex) const { return &_sharedContext[bufferIndex]._context; }
1134#endif //_PS5
1135
1136#if defined(_PS4) || defined(_PS5)
1138 s32 getVideoOutHandle(void) const;
1139#endif // _PS4 || _PS5
1140#if defined(_PS4)
1142 b32 isMonitorHDR(void) const;
1144 b32 isVideoOutModeHDR(void) const;
1145#endif // _PS4
1146
1147#if defined(_WINDOWS)
1149 void getDisplayConfig(GxDisplayConfig& config);
1151 // 成功したかどうかは戻り値のステートで判断
1152 DISPLAY_CONFIG setDisplayConfig(const GxDisplayConfig& config);
1154 b32 isSetDisplayConfigReady(void);
1156 GX_FORCE_INLINE GxSize getDesktopSize(void) const { return _desktopSize; }
1158 b32 isSupportWindowResolution(const GxSize& resolution);
1160 b32 isSupportDisplayResolution(const GxSize& resolution);
1162 GxSize getEnumDisplayResolution(u32 index) const;
1164 const GxRenderDevice::GxDisplayDeviceInformation& getEnumDisplayDeviceInformation(u32 index) const;
1166 GX_FORCE_INLINE b32 isFullScreen(void) const { return _isFullScreen; }
1168 GX_FORCE_INLINE void setFullScreen(b32 fullScreen) { _isFullScreen = fullScreen; }
1170 GX_FORCE_INLINE u32 getRefreshRate(void) const { return _refreshRate; }
1171#endif // _WINDOWS
1172
1173#if defined(_WINDOWS) || defined(_PS4) || defined(_PS5) || defined(_XBOX_XS)
1176 GX_FORCE_INLINE GxCaps getCaps(void) const { return _caps; } // 仮
1179 constexpr u32 getUseTexcoordCount(void) const { return _useTexcoordCount; }
1180#endif //_WINDOWS || _PS4 || _PS5 || _XBOX_XS
1181
1182#if defined(_NX64)
1184 GX_FORCE_INLINE GxNativeDevice* getDevice(void) { return &_device; }
1186 constexpr GxNativeCommandBuffer* getCommandBuffer(void) { return _pCommandBuffer; }
1188 GX_FORCE_INLINE void setOutputResolution(const GxSize& size) { _outputResolution = size; }
1190 b32 registerFastClearColor(RENDER_FORMAT format, const GxColor& color);
1192 b32 registerFastClearDepth(f32 depth);
1193#endif // _NX64
1194
1196 //-------------------------------------------------------------
1198 //-------------------------------------------------------------
1200
1201#if defined(_PS4) || defined(_PS5)
1203 b32 isDisplayOverFullHD( s32 videoHandle );
1205 GxSize getDisplayResolutionPS4( s32 videoHandle, const GxSize* pRequestedResolution = nullptr );
1206
1208 enum class ORBIS_D3D11_VIDEO_OUT_MODE
1209 {
1210 SDR,
1211 SDR_END = SDR,
1212 HDR_PQ,
1213 HDR_END = HDR_PQ,
1214 };
1215
1216#if GX_ENABLE_NEO
1218 enum class ORBIS_D3D11_NEO_RENDER_MODE
1219 {
1220 NONE,
1221 _4K_STRETCH,
1222 _4KG,
1223 _4KCB,
1224 MAX,
1225 };
1226
1228 ORBIS_D3D11_NEO_RENDER_MODE ConvertNeoRenderModeFromGxToOrbisD3D11( GX_NEO_RENDER_MODE neoRenderMode );
1229
1231 constexpr GX_NEO_RENDER_MODE getNeoRenderMode(void) const { return _neoRenderMode; }
1233 void setNeoRenderMode( GX_NEO_RENDER_MODE neoRenderMode);
1234
1235private:
1237 ORBIS_D3D11_NEO_RENDER_MODE getOrbisD3D11NeoRenderMode(void) const;
1239 void setOrbisD3D11NeoRenderMode( ORBIS_D3D11_NEO_RENDER_MODE neoRenderMode);
1240public:
1242 GX_FORCE_INLINE b32 isNeoRenderMode4KG(void) const { return ( getNeoRenderMode() == GX_NEO_RENDER_MODE::_4KG ); }
1244 GX_FORCE_INLINE b32 isNeoRenderMode4KCB(void) const { return ( getNeoRenderMode() == GX_NEO_RENDER_MODE::_4KCB ); }
1246 GX_FORCE_INLINE b32 isNeoRenderModeNeedToResolve(void) const { return isNeoRenderMode4KG() || isNeoRenderMode4KCB(); }
1248 GX_FORCE_INLINE b32 isUsePrimitiveIdMap(void) const { return isNeoRenderMode4KG() || isNeoRenderMode4KCB(); }
1250 GX_FORCE_INLINE b32 isUseDepthStencilNeo(void) const { return isNeoRenderMode4KG() || isNeoRenderMode4KCB(); }
1251
1252private:
1254 void updateNeoRenderMode(void);
1255
1257 GX_FORCE_INLINE void getPropertyNeoRenderMode(void* const pValue) { *static_cast<GX_NEO_RENDER_MODE*>(pValue) = getNeoRenderMode(); }
1259 GX_FORCE_INLINE void setPropertyNeoRenderMode(const void* const pValue) { setNeoRenderMode(*static_cast<GX_NEO_RENDER_MODE*>(const_cast<void*>(pValue))); }
1260public:
1261#endif // GX_ENABLE_NEO
1262#endif // _PS4 || _PS5
1263
1265 //-----------------------------------------------------------
1267 //-----------------------------------------------------------
1269public:
1271#if GX_USE_DX11 || defined(_PS5) || defined(_NX64)
1272 static GxNativeShaderStage getShaderStage(RENDER_SHADER renderShader);
1273#endif // GX_USE_DX11 || _PS5 || _NX64
1274
1275private:
1277 GX_FORCE_INLINE void getPropertyFrameRateTarget(void* const pValue) { *static_cast<RENDER_FRAME_RATE*>(pValue) = getFrameRateTarget(); }
1279 GX_FORCE_INLINE void setPropertyFrameRateTarget(const void* const pValue) { setFrameRateTarget(*static_cast<RENDER_FRAME_RATE*>(const_cast<void*>(pValue))); }
1280
1281#if defined(_NX64)
1283 void getPropertyFirmwareMemoryMinimumFreeSize(void* const pValue);
1285 void getPropertyGraphicsAllocatorFreeSize(void* const pValue);
1286#endif // _NX64
1287
1289 //-------------------------------------------------------------
1291 //-------------------------------------------------------------
1293private:
1295 GX_FORCE_INLINE b32 registerRenderResource(GxRenderResource* pRenderResource);
1297 GX_FORCE_INLINE b32 unregisterRenderResource(GxRenderResource* pRenderResource);
1299 void initializeSharedContext(u32 bufferCount);
1301 void releaseSharedContext(void);
1302
1303public:
1305 GxRenderVertexBuffer* createVertexBuffer(u32 size, u32 attribute);
1307 GxRenderIndexBuffer* createIndexBuffer(u32 size, RENDER_INDEX_TYPE type, u32 attribute);
1311 template<typename T> T* createShader(const void* pAssembledCode, u32 assembledCodeSize, u32 constantRegisterParameterCount, u32 usageInputSemantics, u32 constantBufferSize)
1312 {
1313 auto* pShader = GX_NEW T;
1314 if (!pShader)
1315 {
1316 GX_ASSERT(false, "シェーダ用のメモリの確保に失敗");
1317 return nullptr;
1318 }
1319 else if (!pShader->initialize(pAssembledCode, assembledCodeSize, constantRegisterParameterCount, usageInputSemantics, constantBufferSize))
1320 {
1321 GX_SAFE_RELEASE(pShader);
1322 return nullptr;
1323 }
1324
1325 return pShader;
1326 }
1328 template<> GxRenderPixelShader* createShader(const void* pAssembledCode, u32 assembledCodeSize, u32 constantRegisterParameterCount, u32 usageInputSemantics, u32 constantBufferSize)
1329 {
1330 auto* pShader = GX_NEW GxRenderPixelShader;
1331 if (!pShader)
1332 {
1333 GX_ASSERT(false, "シェーダ用のメモリの確保に失敗");
1334 return nullptr;
1335 }
1336 else if (!pShader->initialize(pAssembledCode, assembledCodeSize, constantRegisterParameterCount, usageInputSemantics, constantBufferSize))
1337 {
1338 GX_SAFE_RELEASE(pShader);
1339 return nullptr;
1340 }
1341
1342 // 不要な中間バッファを削除
1343 // 引数 true でシェーダーの保存に必要なデータは ALLOCATOR_DEVELOP に移動
1344 pShader->releaseDiscardBuffer(true);
1345
1346 return pShader;
1347 }
1348
1350 GxRenderTexture* createTexture2D(const GxSize& size, u32 mipLevel, RENDER_FORMAT format, u32 attribute);
1352 GxRenderTexture* createTexture3D(const GxSize& size, u32 depth, u32 mipLevel, RENDER_FORMAT format, u32 attribute);
1354 GxRenderTexture* createTextureCube(const GxSize& size, u32 mipLevel, RENDER_FORMAT format, u32 attribute);
1356 GxRenderTexture* createRenderTarget(const GxSize& size, RENDER_FORMAT format, RENDER_ANTI_ALIASING antiAliasing, u32 attribute);
1357#if GX_USE_DX11 || GX_USE_DX12
1359 GxRenderTexture* createRenderTarget(GxNativeTexture pD3DTexture2D, u32 attribute);
1360#endif //GX_USE_DX11 || GX_USE_DX12
1361#if defined(_PS4) || defined(_PS5)
1363 GxRenderTexture* createTextureFmask(const GxRenderTexture* pMultiTexture);
1364#endif //_PS4 || _PS5
1365#if GX_USE_DX11 || GX_USE_DX12
1367 GX_FORCE_INLINE void setContextFlush(b32 contextFlush) { _enableContextFlush = contextFlush; }
1369 GX_FORCE_INLINE b32 isEnableContextFlush(void) { return _enableContextFlush; }
1371 constexpr u32 getDxFeatureLevel(void) const { return _dxFeatureLevel; }
1373 constexpr f32 getTexcelOffset(void) const { return (_dxFeatureLevel < GX_DIRECTX_VERSION_11_0) ? 0.0f : 0.5f; }
1375 u32 getShaderModel(void) const;
1376#endif // GX_USE_DX11 || GX_USE_DX12
1378 GX_FORCE_INLINE b32 isEnablePreZSortByDepth(void){ return _enablePreZSortByDepth; }
1380 GX_FORCE_INLINE GxVector2 getResolutionScaleTextureSSAO(void) const { return _resolutionScaleTexSSAO; }
1382 GX_FORCE_INLINE void setResolutionScaleTextureSSAO( const GxVector2& scale ) { _resolutionScaleTexSSAO = scale; }
1384 GX_FORCE_INLINE GxRenderTexture* getBackBufferDepthStencil(void) const
1385 {
1386#if defined(_PS5)
1387 return _sharedContext[_writeBuffer]._pBackBufferDepthStencil;
1388#else //_PS5
1389 return _pBackBufferDepthStencil;
1390#endif // !_PS5
1391 }
1393 GxRenderTexture* createDepthStencil(const GxSize& size, RENDER_FORMAT format, RENDER_ANTI_ALIASING antiAliasing, u32 attribute);
1394
1395#if defined(GX_ENABLE_HDR_MONITOR)
1397 constexpr GxRenderTexture* getRenderTextureHdrWorkingBuffer(void) { return _pRenderTextureHdrWorkingBuffer; }
1398#endif // GX_ENABLE_HDR_MONITOR
1399
1402
1404 GX_FORCE_INLINE void setDisableShadowPass(b32 disable){ _disableShadowPass = disable; }
1406 GX_FORCE_INLINE b32 isDisableShadowPass(void) const { return _disableShadowPass; }
1407
1409 GX_FORCE_INLINE void setDisableOverPaintPass(b32 disable){ _disableOverPaintPass = disable; }
1411 GX_FORCE_INLINE b32 isDisableOverPaintPass(void) const { return _disableOverPaintPass; }
1412
1413#if GX_ENABLE_OCCLUSION_CULLING
1415 constexpr GxRenderQuery* getOcclusionQuery(u32 bufferIndex) const { return _sharedContext[bufferIndex]._pOcclusionQuery; }
1416#endif //GX_ENABLE_OCCLUSION_CULLING
1417
1419 GX_FORCE_INLINE void setDisableProcedualPass(b32 disable){ _disableProcedualPass = disable; }
1421 GX_FORCE_INLINE b32 isDisableProcedualPass(void) const { return _disableProcedualPass; }
1422
1424 GX_FORCE_INLINE b32 isUseDummyShader(void) const { return _useDummyShader; }
1425
1426#if GX_DEVELOP
1428 GX_FORCE_INLINE void setEnableWarningShaderCompile(b32 enable){ _enableWarningShaderCompile = enable; }
1429#endif // GX_DEVELOP
1431 GX_FORCE_INLINE b32 isEnableWarningShaderCompile(void) const { return _enableWarningShaderCompile; }
1432
1434 GX_FORCE_INLINE b32 isNormalMap16FP() const { return _isNormalMap16FP; }
1435
1437 //-------------------------------------------------------------
1439 //-------------------------------------------------------------
1441private:
1443 void setRenderStateNoCache(RENDER_STATE renderState, u32 value);
1445 void setDepthTestStateNoCache(GxRenderDepthTestState state);
1447 void setStencilTestStateNoCache(GxRenderStencilTestState state, u32 stencilRef, b32 stencilTwoSideEnable);
1449 void setAlphaTestStateNoCache(GxRenderAlphaTestState state);
1451 void setBlendStateNoCache(GxRenderBlendState state);
1453 GX_FORCE_INLINE void setViewportNoCache(const GxViewportData& viewportData);
1455 void setViewportNoCache(const GxRect& rect, f32 nearZ, f32 farZ);
1457 void setScissorRectNoCache(const GxRect& rect);
1459 void setVertexStreamNoCache(u32 slot, const GxVertexStream* pVertexStream);
1460#if defined(_WINDOWS) || defined(_PS4) || defined(_PS5) || defined(_XBOX_XS)
1462 void setVertexStreamNoCache(u32 slot, const GxVertexStream* pVertexStream, u32 instanceCount);
1463#endif // _WINDOWS || _PS4 || _PS5 || _XBOX_XS
1465 void setIndexBufferNoCache(GxRenderIndexBuffer* pIndexBuffer);
1467 void setVertexDeclarationNoCache(GxRenderVertexDeclaration* pVertexDeclaration);
1469 void setShaderNoCache(RENDER_SHADER renderShader, GxRenderShader* pShader);
1471 void setTextureNoCache(RENDER_SHADER renderShader, u32 samplerIndex, GxRenderTexture* pTexture, b32 isUav);
1473 void setSamplerStateNoCache(RENDER_SHADER renderShader, u32 samplerIndex, GxRenderSamplerState state);
1475 void setRenderTargetNoCache(u32 index, GxRenderTexture* pRenderTarget);
1477 void setDepthStencilNoCache(GxRenderTexture* pDepthStencil, b32 readonly = false);
1478
1479private:
1481 GX_FORCE_INLINE void setRenderState(RENDER_STATE renderState, u32 value);
1483 GX_FORCE_INLINE void setDepthTestState(GxRenderDepthTestState state);
1485 GX_FORCE_INLINE void setStencilTestState(GxRenderStencilTestState state, u32 stencilRef, b32 stencilTwoSideEnable);
1487 GX_FORCE_INLINE void setAlphaTestState(GxRenderAlphaTestState state);
1489 GX_FORCE_INLINE void setBlendState(GxRenderBlendState state);
1491 GX_FORCE_INLINE void setViewport(const GxViewportData& viewportData);
1493 GX_FORCE_INLINE void setScissorRect(const GxRect& rect);
1495#if defined(_NX64)
1496 GX_FORCE_INLINE void setShaderConstantB(RENDER_SHADER renderShader, u32 startRegister, const b32* pBooleanArray, u32 count, u32 bindLocationIndex);
1497#else //_NX64
1498 GX_FORCE_INLINE void setShaderConstantB(RENDER_SHADER renderShader, u32 startRegister, const b32* pBooleanArray, u32 count);
1499#endif // !_NX64
1501#if defined(_NX64)
1502 GX_FORCE_INLINE void setShaderConstantI(RENDER_SHADER renderShader, u32 startRegister, const s32* pIntArray, u32 count, u32 bindLocationIndex);
1503#else //_NX64
1504 GX_FORCE_INLINE void setShaderConstantI(RENDER_SHADER renderShader, u32 startRegister, const s32* pIntArray, u32 count);
1505#endif // !_NX64
1507#if defined(_NX64)
1508 GX_FORCE_INLINE void setShaderConstantF(RENDER_SHADER renderShader, u32 startRegister, const f32* pFloatArray, u32 count, u32 bindLocationIndex);
1509#else //_NX64
1510 GX_FORCE_INLINE void setShaderConstantF(RENDER_SHADER renderShader, u32 startRegister, const f32* pFloatArray, u32 count);
1511#endif // !_NX64
1513 GX_FORCE_INLINE void setVertexStream(u32 slot, const GxVertexStream* pVertexStream);
1514#if defined(_WINDOWS) || defined(_PS4) || defined(_PS5) || defined(_XBOX_XS)
1516 GX_FORCE_INLINE void setVertexStream(u32 slot, const GxVertexStream* pVertexStream, u32 instanceCount);
1517#endif // _WINDOWS || _PS4 || _PS5 || _XBOX_XS
1519 GX_FORCE_INLINE void setIndexBuffer(GxRenderIndexBuffer* pIndexBuffer);
1521 GX_FORCE_INLINE void setVertexDeclaration(GxRenderVertexDeclaration* pVertexDeclaration);
1523 GX_FORCE_INLINE void setShader(RENDER_SHADER renderShader, GxRenderShader* pShader);
1524
1526 GX_FORCE_INLINE void setTexture(RENDER_SHADER renderShader, u32 samplerIndex, GxRenderTexture* pTexture, b32 isUav);
1528 GX_FORCE_INLINE void setSamplerState(RENDER_SHADER renderShader, u32 samplerIndex, GxRenderSamplerState state);
1529
1531 GX_FORCE_INLINE void setRenderTarget(u32 index, GxRenderTexture* pRenderTarget);
1533 GX_FORCE_INLINE void setDepthStencil(GxRenderTexture* pDepthStencil, b32 readOnly = false);
1534
1536 void invalidateState(void);
1537
1538public:
1540 void storeState(void);
1542 void storeVertexDataState(void);
1543
1544#if defined(_PS4) || defined(_PS5)
1546 constexpr GxRenderTexture* getDefaultTexture(void) const { return _pDefaultTexture; }
1548 constexpr GxRenderTexture* getDefaultTextureCube(void) const { return _pDefaultTextureCube; }
1549#endif // _PS4 || _PS5
1550
1551private:
1552#if GX_USE_DX11 || GX_USE_DX12 || defined(_NX64)
1554 void applyState(void);
1555#endif //GX_USE_DX11 || GX_USE_DX12 || _NX64
1556#if GX_USE_DX11
1558 void applyState(RENDER_SHADER renderShader);
1559public:
1561 ID3D11Buffer* getVertexShaderConstantBuffer(u32 bufferSize) { return _vertexShaderConstantPool.allocateSharedBuffer(bufferSize); }
1563 ID3D11Buffer* getPixelShaderConstantBuffer(u32 bufferSize) { return _pixelShaderConstantPool.allocateSharedBuffer(bufferSize); }
1564private:
1565#elif GX_USE_DX12
1567 void applyState(RENDER_SHADER renderShader, u32* pDescriptorCounts, D3D12_GPU_DESCRIPTOR_HANDLE& samplerGpuHandle);
1568#elif defined(_PS5)
1570 void applyState(u32 vertexCount, RENDER_PRIMITIVE_TYPE primitiveType);
1572 void applyStateShader(RENDER_SHADER renderShader);
1573#elif defined(_NX64)
1575 void applySurfaceState(void);
1577 void applyDrawState(void);
1579 b32 applyShaderState(RENDER_SHADER renderShader);
1581 void swapCommandBufferMemory(u32 index);
1583 void applyDisplayOutputState(void);
1584#endif // _NX64
1585
1586protected:
1588 void setDefaultState(void);
1589
1591 void unsetAllRenderResource(void);
1592
1594 void forceDrawState(const GxCommandForceDrawState* pCommand);
1595
1597 //-------------------------------------------------------------
1599 //-------------------------------------------------------------
1601private:
1603 void draw(const GxCommandDraw* pCommand);
1605 void drawIndexed(const GxCommandDrawIndexed* pCommand);
1607 void drawMemory(const GxCommandDrawMemory* pCommand);
1609 void drawIndexedMemory(const GxCommandDrawIndexedMemory* pCommand);
1610#if GX_ENABLE_COMPUTE_SHADER
1612 void dispatch(const GxCommandDispatch* pCommand);
1613#endif //GX_ENABLE_COMPUTE_SHADER
1615 void clear(const GxCommandClear* pCommand);
1617 void clearHDR(const GxCommandClearHDR* pCommand);
1618
1619#if GX_ENABLE_HTILE_STENCIL_MASK
1621 void maskHtileStencilRegion(const GxCommandMaskHtileStencilRegion* pCommand);
1622#endif // GX_ENABLE_HTILE_STENCIL_MASK
1623
1624private:
1626 void copyRenderTargetToTexture(const GxCommandCopyRenderTargetToTexture* pCommand);
1628 void copyDepthStencilToTexture(const GxCommandCopyDepthStencilToTexture* pCommand);
1630 void copyRenderTargetToTextureStretch(const GxCommandCopyRenderTargetToTextureStretch* pCommand);
1632 void copyDepthStencilToTextureStretch(const GxCommandCopyDepthStencilToTextureStretch* pCommand);
1634 void copyRenderTargetToTextureWithMipmap(const GxCommandCopyRenderTargetToTextureWithMipmap* pCommand);
1635
1636#if GX_DEVELOP
1638 void beginMarker(GX_CSTR name);
1640 void endMarker(GX_CSTR name);
1641#endif // GX_DEVELOP
1642
1644 GX_FORCE_INLINE void setPredication(const GxCommandSetPredication* pCommand);
1645
1646public:
1648 void flushGpuCommandBuffer(void);
1649
1650private:
1652 void beginScene(void);
1654 void endScene(void);
1655
1657 void waitVSyncOwn(void);
1658
1660 f32 getFrameRateTargetTime(void);
1661
1663 void present(void);
1664
1665public:
1667 void setAllContextPriority(RENDER_VIEW view, RENDER_SUB_VIEW subView, RENDER_PASS pass, u32 subPriority);
1668
1670 void begin(void);
1672 constexpr void end(void) {}
1673
1675 void buildCommand(void);
1676
1678 void sync(void);
1679#if GX_USE_DX12
1680#if GX_EDITOR
1682 void syncRenderThread(void);
1683#endif //GX_EDITOR
1684#if defined(_WINDOWS)
1686 void waitForGPU(void);
1688 void waitForGPUCopy(void);
1689#endif //_WINDOWS
1690#endif //GX_USE_DX12
1691
1693 void startRender(void);
1694
1696 void renderBlankScreen(void);
1697
1699 constexpr u32 getContextBufferCount(void) const { return static_cast<u32>(_bufferCount); }
1700
1701private:
1703 void executeRender(void);
1704
1706 void* sendDrawCommandCommonInfo(void* pData);
1708 void sendRegister(RENDER_SHADER renderShader, const GxRegisterSet& registerSet);
1709
1710protected:
1712 void measureFPS(void);
1713
1714private:
1716 void onLostDevice(void);
1717
1719 b32 onResetDevice(void);
1720
1722 void onRender(void);
1723
1725 void registerNotifier(GxRenderNotifier* pNotifier);
1727 void unregisterNotifier(GxRenderNotifier* pNotifier);
1728
1730 void registerNotifier_onRender(GxRenderNotifierForOnRender* pNotifier);
1732 void unregisterNotifier_onRender(GxRenderNotifierForOnRender* pNotifier);
1733
1734private:
1736 GX_HANDLE registerTexture(GxRenderTexture* pTexture);
1738 void unregisterTexture(GxRenderTexture* pTexture);
1739
1741 void removeCachedVertexDeclaration(GxRenderVertexDeclaration* pDeclaration);
1742
1744 GX_FORCE_INLINE void* allocatePacketBlock(void);
1746 GX_FORCE_INLINE void* allocateCommandBlock(void);
1747
1748public:
1750 GX_FORCE_INLINE void* allocateCommandBufferMemory(u32 size);
1751
1753 GX_FORCE_INLINE size_t getMainMemorySize(void) const;
1755 GX_FORCE_INLINE size_t getFreeMainMemorySize(void) const;
1756
1758 GX_FORCE_INLINE size_t getLocalMemorySize(void) const;
1760 GX_FORCE_INLINE size_t getFreeLocalMemorySize(void) const;
1761
1763 GX_FORCE_INLINE size_t getTotalAllocatedHighLocalMemorySize(void) const;
1765 GX_FORCE_INLINE size_t getTotalAllocatedHighMainMemorySize(void) const;
1766
1767#if GX_DEVELOP
1769 constexpr s32 getVramSizeVertex(void) const { return _vramSizeVertex; }
1771 constexpr void addVramSizeVertex(s32 size){ _vramSizeVertex += size; }
1773 constexpr s32 getVramSizeIndex(void) const { return _vramSizeIndex; }
1775 constexpr void addVramSizeIndex(s32 size){ _vramSizeIndex += size; }
1777 constexpr s32 getVramSizeRenderTarget(void) const { return _vramSizeRenderTarget; }
1779 constexpr void addVramSizeRenderTarget(s32 size){ _vramSizeRenderTarget += size; }
1781 constexpr s32 getVramSizeTexture(void) const { return _vramSizeTexture; }
1783 constexpr void addVramSizeTexture(s32 size){ _vramSizeTexture += size; }
1785 constexpr s32 getVramSizeFilter(void) const { return _vramSizeFilter; }
1787 constexpr void addVramSizeFilter(s32 size){ _vramSizeFilter += size; }
1789 constexpr s32 getVramSizeOther(void) const { return _vramSizeOther; }
1791 constexpr void addVramSizeOther(s32 size){ _vramSizeOther += size; }
1793 constexpr s32 getVramSizeVertexDevelop(void) const { return _vramSizeVertexDevelop; }
1795 constexpr void addVramSizeVertexDevelop(s32 size){ _vramSizeVertexDevelop += size; }
1797 constexpr s32 getVramSizeIndexDevelop(void) const { return _vramSizeIndexDevelop; }
1799 constexpr void addVramSizeIndexDevelop(s32 size){ _vramSizeIndexDevelop += size; }
1801 constexpr s32 getVramSizeRenderTargetDevelop(void) const { return _vramSizeRenderTargetDevelop; }
1803 constexpr void addVramSizeRenderTargetDevelop(s32 size){ _vramSizeRenderTargetDevelop += size; }
1805 constexpr s32 getVramSizeTextureDevelop(void) const { return _vramSizeTextureDevelop; }
1807 constexpr void addVramSizeTextureDevelop(s32 size){ _vramSizeTextureDevelop += size; }
1809 constexpr s32 getVramSizeFilterDevelop(void) const { return _vramSizeFilterDevelop; }
1811 constexpr void addVramSizeFilterDevelop(s32 size){ _vramSizeFilterDevelop += size; }
1813 constexpr s32 getVramSizeOtherDevelop(void) const { return _vramSizeOtherDevelop; }
1815 constexpr void addVramSizeOtherDevelop(s32 size){ _vramSizeOtherDevelop += size; }
1816#endif //GX_DEVELOP
1817
1818#if defined(_PS4) || defined(_PS5) || defined(_NX64)
1820 GX_FORCE_INLINE void* allocateLocal(u32 size, u32 alignment);
1822 GX_FORCE_INLINE void* allocateMain(u32 size, u32 alignment);
1824 GX_FORCE_INLINE void free(void* pAddress);
1825#endif //_PS4 || _PS5 || _NX64
1826
1827#if defined(_NX64)
1829 void* allocateStorage(u32 size);
1831 GxNativeMemoryPool* createMemoryPool(u32 size, MEMORY_POOL_TYPE type, void* pBuffer = nullptr);
1833 void deleteMemoryPool(GxNativeMemoryPool* pMemory);
1834
1836 void createBufferFromShaderPool(GxNativeBuffer* pBuffer, u32 size);
1838 void deleteBufferFromShaderPool(u32 offset);
1839
1841 void createBufferFromCommonPool(GxNativeTextureBuilder* pBuilder);
1843 void createBufferFromCommonPool(GxNativeBuffer* pBuffer, u32 size);
1845 void deleteBufferFromCommonPool(u32 offset);
1846
1848 void createZCullBuffer(u32 size);
1849
1851 GX_FORCE_INLINE u32 registerTexturePool(GxNativeTexture* pTexture, GxNativeTextureView* pView);
1853 GX_FORCE_INLINE void unregisterTexturePool(u32 id);
1854
1856 GX_FORCE_INLINE u32 registerSamplerPool(GxNativeSampler* pSampler);
1858 GX_FORCE_INLINE u32 registerSamplerPool(GxNativeSamplerBuilder* pBuilder);
1860 GX_FORCE_INLINE u32 createSampler(GxRenderSamplerState sampler);
1862 GX_FORCE_INLINE void unregisterSamplerPool(u32 id);
1863
1865 constexpr u32 getCommandBufferUsedSizeMax(void) const { return _commandBufferUsedMax; }
1867 constexpr u32 getControlBufferUsedSizeMax(void) const { return _controlBufferUsedMax; }
1868
1869#if GX_DEVELOP
1871 constexpr GxGpuCounter* getGpuCounter(void) const { return _pGpuCounter; }
1872#endif // GX_DEVELOP
1873#endif // _NX64
1874
1875public:
1879 u32* getUserScreenshotBuffer(GxSize& size);
1881 void freeUserScreenshotBuffer(void);
1882
1883#if GX_DEVELOP
1884public:
1886 b32 requestSaveScreenshot(GX_CSTR fileName, b32 useScreenshotNumber = true);
1887
1889 GX_FORCE_INLINE GxColor getChromaKeyColor(void) const { return _chromaKeyColor; }
1891 GX_FORCE_INLINE void setChromaKeyColor(const GxColor color) { _chromaKeyColor = color; }
1893 GX_FORCE_INLINE b32 isChromaKeyingToAlpha(void) const { return _chromaKeyingToAlpha; }
1895 GX_FORCE_INLINE void setChromaKeyingToAlpha(b32 enable) { _chromaKeyingToAlpha = enable; }
1896
1898 constexpr u32 getHighResolutionScreenshotScaleX(void) const { return _highResolutionScreenshotScaleX; }
1900 constexpr u32 getHighResolutionScreenshotScaleY(void) const { return _highResolutionScreenshotScaleY; }
1902 void requestSaveHighResolutionScreenshot(void);
1904 constexpr s32 isHighResolutionScreenshotCapturing(void) const { return _highResolutionScreenshotPhase >= 0; }
1906 constexpr u32 getHighResolutionScreenshotCapturingPhaseX(void) const { return (_highResolutionScreenshotPhase / _bufferCount) % _highResolutionScreenshotScaleX; }
1908 constexpr u32 getHighResolutionScreenshotCapturingPhaseY(void) const { return (_highResolutionScreenshotPhase / _bufferCount) / _highResolutionScreenshotScaleX; }
1910 GX_FORCE_INLINE const GxPerformanceCounterView getPerformanceCounter(RENDER_VIEW index) const { return _performanceCounter[static_cast<s32>(index)]; }
1911#if defined(_WINDOWS)
1913 void requestSaveCubeMapShot(void);
1915 GX_FORCE_INLINE b32 isCubeMapShotCapturing(void) const { return _cubeMapShotPhase >= 0; }
1917 constexpr u32 getCubeMapShotCapturingFace(void) const { return (_cubeMapShotPhase / _bufferCount); }
1919 GX_FORCE_INLINE GxVector3 getCubeMapShotPosition(void) const { return _cubeMapShotPosition; }
1920#endif // _WINDOWS
1921#endif // GX_DEVELOP
1922
1923private:
1925 void buildCommandBlankScreen(void);
1927 void buildCommandInner(GxPacket* pPacket[GxThread::HARDWARE_THREAD_MAX]);
1928
1929#if defined(_WINDOWS)
1931 void copyTexture(GxNativeTexture* pDstTexture, GxRenderTexture* pSrcTexture);
1932#endif //_WINDOWS
1933#if GX_DEVELOP
1935 void saveScreenshot(void);
1936#if defined(_WINDOWS)
1938 void saveBmp(GX_CSTR fileName, GxNativeTexture pTexture, s32 width, s32 height);
1939#endif // _WINDOWS
1940#endif // GX_DEVELOP
1941
1943 void saveUserScreenshot(void);
1944
1946 //-------------------------------------------------------------
1948 //-------------------------------------------------------------
1950private:
1951 u32 _bufferCount;
1952 GxSharedContext* _sharedContext;
1953 GxString _deviceName;
1954 RENDER_FRAME_RATE _frameRateTarget;
1955 b32 _forceVBlankWait;
1956 u32 _frameRateCounter;
1957 GxTimer _frameRateTimer;
1958 f32 _frameRate;
1959 f32 _frameRateAverage;
1960 f32 _frameTime;
1961 f32 _frameTimeAverage;
1962 f32 _frameTimeTotal;
1963 f32 _frameTimeLog[FRAME_TIME_LOG_COUNT];
1964 f32 _frameTimeLog_I[FRAME_TIME_LOG_COUNT_I];
1965 b32 _frameAverageAvailable;
1966 f32 _gpuFrameTime;
1967 u64 _gpuTimeStampFrequency;
1968 b32 _disableShadowPass;
1969 b32 _disableOverPaintPass;
1970 b32 _disableProcedualPass;
1971 b32 _useDummyShader;
1972 b32 _enableWarningShaderCompile;
1973 GxSize _outputResolution;
1974 b32 _isNormalMap16FP;
1975 GxRect _safetyArea;
1976 f32 _aspectRatio;
1977 f32 _gamma;
1978 GxAllocatorFrame* _pAllocatorContext;
1979 GxAllocatorFrame* _pAllocatorExecuteCommand;
1980 GxRenderContext* _pContext;
1981 GxRenderNotifier* _pNotifierTop;
1982 GxRenderNotifierForOnRender* _pNotifierTopOnRender;
1983 GxCriticalSection _criticalSectionNotifier;
1984 GxCriticalSection _criticalSectionNotifierOnRender;
1985
1987 GxCriticalSection _criticalSectionTexture;
1988
1989 GxArray _vertexDeclarationArray;
1990 GxArray _vertexDeclarationHashArray;
1991 GxCriticalSection _criticalSectionVertexDeclaration;
1992 GxRenderVertexDeclaration* _pClearHDRVertexDeclaration;
1993 GxResShaderVertex* _pClearHDRVertexShader;
1994 GxResShaderPixel* _pClearHDRPixelShader;
1995 GX_HANDLE _handleProjectionMatrix2D;
1996 GX_HANDLE _handleMipLevel;
1997 GX_HANDLE _handleTexture;
1998
1999 GxRenderThread* _pRenderThread;
2000 b32 _useRenderThread;
2001 b32 _useRenderThreadThisFrame;
2002 u32 _writeBuffer;
2003 u32 _renderBuffer;
2004 u32 _commandBufferSize;
2005 u32 _maxCommandBufferSize;
2006 u32 _usedCommandBufferSize;
2007 GxRenderResourceRegister* _pRenderResourceRegister;
2008 b32 _isFirstFrame;
2009 u32 _renderStateValueNow[static_cast<s32>(RENDER_STATE::MAX)];
2010 GxRenderDepthTestState _depthTestStateNow;
2011 GxRenderStencilTestState _stencilTestStateNow;
2012 u32 _stencilRefNow;
2013 b32 _stencilTwoSideEnableNow;
2014 GxRenderAlphaTestState _alphaTestStateNow;
2015 GxRenderBlendState _blendStateNow;
2016 GxViewportData _viewportDataNow;
2017 GxRect _scissorRectNow;
2018 GxVertexStream _vertexStreamNow[RENDER_VERTEX_STREAM_COUNT_MAX];
2019 GxRenderIndexBuffer* _pIndexBufferNow;
2020 GxRenderVertexDeclaration* _pVertexDeclarationNow;
2021 GxRenderShader* _pShaderNow[static_cast<u32>(RENDER_SHADER::MAX)];
2022 u32 _maxSkinningJointCount;
2023 b32 _enablePreZSortByDepth;
2024 GxVector2 _resolutionScaleTexSSAO;
2025 GxRenderTexture* _pSamplerNow[static_cast<u32>(RENDER_SHADER::MAX)][RENDER_TEXTURE_SAMPLER_COUNT_MAX];
2026 GxRenderSamplerState _samplerStateNow[static_cast<u32>(RENDER_SHADER::MAX)][RENDER_TEXTURE_SAMPLER_COUNT_MAX];
2027 GxRenderTexture* _pSamplerUavNow[static_cast<u32>(RENDER_SHADER::MAX)][RENDER_TEXTURE_SAMPLER_UAV_COUNT_MAX];
2028 GxRenderTexture* _pRenderTargetNow[RENDER_TARGET_COUNT_MAX];
2029 GxRenderTexture* _pDepthStencilNow;
2030 b32 _isReadOnlyDepthStencilNow;
2031 b32 _isInFailedPredication;
2032 GxRenderQuery* _pFlushQuery;
2033 GxVramAllocator* _pVramAllocator;
2034public:
2036private:
2037 // Master ビルドスクリーンショット
2038 GxCriticalSection _criticalSectionUserScreenshot;
2039 b32 _userScreenshotRequest;
2040 u32* _pUserScreenshotBuffer;
2041 GxSize _userScreenshotSize;
2042
2043#if GX_DEVELOP
2044 b32 _isExecuting;
2045 GX_CSTR _markerStack[RENDER_MARKER_NEST_COUNT];
2046 u32 _markerStackIndex;
2047 GxPerformanceCounterView _performanceCounter[static_cast<s32>(RENDER_VIEW::MAX)];
2048 GxCriticalSection _criticalSectionScreenshot;
2049 GxColor _chromaKeyColor;
2050 b32 _chromaKeyingToAlpha;
2051 u32 _highResolutionScreenshotScaleX;
2052 u32 _highResolutionScreenshotScaleY;
2053 s32 _highResolutionScreenshotPhase;
2054 GxScreenshotStateStore _screenshotStateStore;
2055 s32 _vramSizeVertex;
2056 s32 _vramSizeIndex;
2057 s32 _vramSizeRenderTarget;
2058 s32 _vramSizeTexture;
2059 s32 _vramSizeFilter;
2060 s32 _vramSizeOther;
2061 s32 _vramSizeVertexDevelop;
2062 s32 _vramSizeIndexDevelop;
2063 s32 _vramSizeRenderTargetDevelop;
2064 s32 _vramSizeTextureDevelop;
2065 s32 _vramSizeFilterDevelop;
2066 s32 _vramSizeOtherDevelop;
2067 b32 _enableGpuProfiling;
2068 b32 _isGpuProfiling;
2069 u32 _drawCallCount;
2070#endif //GX_DEVELOP
2071
2072#if defined(GX_ENABLE_HDR_MONITOR)
2073 GxRenderTexture* _pRenderTextureHdrWorkingBuffer;
2074#endif // GX_ENABLE_HDR_MONITOR
2075
2076#if defined(_WINDOWS) || defined(_PS4) || defined(_PS5) || defined(_XBOX_XS)
2077 u32 _instanceCountNow[RENDER_VERTEX_STREAM_COUNT_MAX];
2078 b32 _legacyDevice;
2079 GxCaps _caps;
2080 b32 _onLostDevice;
2081 u32 _useTexcoordCount;
2082#endif // _WINDOWS || _PS4 || _PS5 || _XBOX_XS
2083
2084#if defined(_NX64) || GX_USE_DX11
2085 GxRenderTexture* _pBackBuffer;
2086#endif // _NX64 || GX_USE_DX11
2087#if defined(_NX64) || GX_USE_DX11 || GX_USE_DX12
2088 GxRenderTexture* _pBackBufferDepthStencil;
2089#endif // _NX64 || GX_USE_DX11 || GX_USE_DX12
2090#if defined(_PS5) || GX_USE_DX12
2091 GxVector4 _shaderConstSet[static_cast<u32>(RENDER_SHADER::MAX)][RENDER_SHADER_CONST_MAX];
2092#endif //_PS5 || GX_USE_DX12
2093
2094#if GX_USE_DX11 || GX_USE_DX12
2095 b32 _enableContextFlush;
2096 D3D_FEATURE_LEVEL _dxFeatureLevel;
2097 u32 _shaderModel;
2098 GxNativeDevice _pDevice;
2099 GxNativeSwapChain* _pSwapChain;
2100 IDXGIAdapter* _pAdapter;
2101#if GX_EDITOR
2102 GxArray _newSwapChains;
2103 GxArray _swapChains;
2104#endif //GX_EDITOR
2105#if GX_DEVELOP
2106 b32 _disableSrgbTextureDevelop;
2107#endif // GX_DEVELOP
2108#endif //GX_USE_DX11 || GX_USE_DX12
2109
2110#if GX_USE_DX11
2111 GxRenderShaderConstantPool _vertexShaderConstantPool;
2112 GxRenderShaderConstantPool _pixelShaderConstantPool;
2113 GxD3D11State _d3dStateNow;
2114 GxD3D11State _d3d11StateSet;
2115public: // 仮
2116 GxD3D11SamplerStateTable _d3d11SamplerStateTable;
2117 GxD3D11RasterizerStateTable _d3d11RasterizerStateTable;
2118 GxD3D11DepthStencilStateTable _d3d11DepthStencilStateTable;
2119 GxD3D11BlendStateTable _d3d11BlendStateTable;
2120private:
2121 ID3D11DeviceContext* _pD3D11ImmediateContext;
2122 GxCriticalSection _d3d11ImmediateContextCriticalSection;
2123 ID3D11DeviceContext* _pD3D11DeferredContextAsync;
2124 GxCriticalSection _d3d11DeferredContextAsyncCriticalSection;
2125#endif //GX_USE_DX11
2126
2127#if GX_USE_DX12
2128 D3D12_GRAPHICS_PIPELINE_STATE_DESC _d3dStateNow;
2129#if GX_ENABLE_COMPUTE_SHADER
2130 D3D12_COMPUTE_PIPELINE_STATE_DESC _d3dComputeStateNow;
2131#endif //GX_ENABLE_COMPUTE_SHADER
2132 ComPtr<ID3D12GraphicsCommandList> _pD3D12GraphicsCommandList;
2133 ComPtr<ID3D12CommandQueue> _pD3D12CommandQueue;
2134 ComPtr<ID3D12GraphicsCommandList> _pD3D12GraphicsCommandListCopy;
2135 ComPtr<ID3D12CommandAllocator> _pD3DCommandAllocatorCopy;
2136 GxCriticalSection _d3d12GraphicsCommandListCopyCriticalSection;
2137#if defined(_WINDOWS)
2138 ComPtr<ID3D12CommandQueue> _pD3D12CommandQueueCopy;
2139 ComPtr<ID3D12Fence> _pD3D12Fence;
2140 ComPtr<ID3D12Fence> _pD3D12FenceCopy;
2141 Microsoft::WRL::Wrappers::Event _fenceEvent;
2142 Microsoft::WRL::Wrappers::Event _fenceEventCopy;
2143 u64 _fenceValueCopy;
2144#endif //_WINDOWS
2145 ComPtr<ID3D12DescriptorHeap> _descriptorHeapView;
2146 ComPtr<ID3D12DescriptorHeap> _descriptorHeapSampler;
2147 ComPtr<ID3D12DescriptorHeap> _descriptorHeapSamplerSet;
2148 u32 _descriptorCountView;
2149 u32 _descriptorCountSampler;
2150 u32 _descriptorCountSamplerSet;
2151 ComPtr<ID3D12RootSignature> _pRootSignature;
2152#if GX_ENABLE_COMPUTE_SHADER
2153 ComPtr<ID3D12RootSignature> _pRootSignatureCompute;
2154#endif //GX_ENABLE_COMPUTE_SHADER
2155 GxMap<u64, u32> _samplers;
2156 GxMap<u64, u64> _samplerSets;
2157 ComPtr<ID3D12PipelineState> _pPipelineState[PIPELINE_STATE_MAX];
2159 b32 _pipelineStateDirty;
2160 D3D12_FEATURE_DATA_ROOT_SIGNATURE _featureLevelRootSignature;
2161 D3D12_FEATURE_DATA_D3D12_OPTIONS _featureLevelOptions;
2162 D3D12_FEATURE_DATA_D3D12_OPTIONS1 _featureLevelOptions1;
2163 D3D12_FEATURE_DATA_D3D12_OPTIONS2 _featureLevelOptions2;
2164 D3D12_FEATURE_DATA_D3D12_OPTIONS3 _featureLevelOptions3;
2165 D3D12_FEATURE_DATA_D3D12_OPTIONS4 _featureLevelOptions4;
2166 D3D12_FEATURE_DATA_D3D12_OPTIONS5 _featureLevelOptions5;
2167 D3D12_FEATURE_DATA_D3D12_OPTIONS6 _featureLevelOptions6;
2168 D3D12_FEATURE_DATA_D3D12_OPTIONS7 _featureLevelOptions7;
2169#if GX_DEVELOP
2170 ComPtr<ID3D12DeviceRemovedExtendedDataSettings> _pDredSettings;
2171#endif //GX_DEVELOP
2172#endif // GX_USE_DX12
2173
2174#if defined(_PS4) || defined(_PS5)
2175 GxRenderTexture* _pDefaultTexture;
2176 GxRenderTexture* _pDefaultTextureCube;
2177#endif // _PS4 || _PS5
2178
2179#if defined(_WINDOWS)
2180 GxSize _desktopSize;
2181 GxSize _currentClientSize;
2182 GxSize _outputResolutionRequest;
2183 GxSize _backBufferResolution;
2184 b32 _outputResolutionRestoreRequest;
2185 b32 _outputResolutionRestoreReady;
2186 GxCriticalSection _criticalSectionSetDisplayConfig;
2187 b32 _isFullScreen;
2188 b32 _isFullScreenReady;
2189 GxSize _fullScreenResolution;
2190 b32 _useAltEnterKeyFullScreen;
2191 u32 _refreshRate;
2192 GxDisplayDeviceInformation _enumDisplayDeviceInformation[16];
2193 GxSize _enumDisplayResolution[128];
2194 u32 _fullScreenScalingMode;
2195 b32 _enableWindowResizeCheck;
2196#if GX_DEVELOP
2197 s32 _cubeMapShotPhase;
2198 GxVector3 _cubeMapShotPosition;
2199 u32 _cubeMapShotSize;
2200 b32 _cubeMapShotGenerateMipMaps;
2201 b32 _cubeMapShotSaveDds;
2202 b32 _cubeMapShotSaveBmp;
2203 b32 _cubeMapConvertOrochi1Format;
2204 GxNativeTexture _pCapturingCubeMap;
2205 GxUnitCameraBase* _pCubeMapShotCamera;
2206 GxUnitCameraBase* _pCubeMapShotOldCamera;
2207#endif //GX_DEVELOP
2208#elif defined(_XBOX_XS)
2209 D3D12XBOX_FRAME_PIPELINE_TOKEN _framePipelineToken;
2210#elif defined(_NX64)
2211 GxNativeMemoryPool* _pRegisterMemoryPool;
2212 GxRegisterBlockInformation _registerBlockInformation[static_cast<u32>(RENDER_SHADER::MAX)][RENDER_UNIFORM_BLOCK_COUNT_MAX];
2213 GxNativeBuffer _buffer[static_cast<u32>(RENDER_SHADER::MAX)][2];
2214 GxNativeBuffer* _pBufferCurrent[static_cast<u32>(RENDER_SHADER::MAX)];
2215 u32 _registerBlockInformationOffset[static_cast<u32>(RENDER_SHADER::MAX)];
2216 u32 _registerBlockInformationCount[static_cast<u32>(RENDER_SHADER::MAX)];
2217 GxRenderTexture* _pDepthStencilSet;
2218 GxRenderTexture* _pRenderTargetSet[RENDER_TARGET_COUNT_MAX];
2220 GxRenderTexture* _samplerUavSet[static_cast<u32>(RENDER_SHADER::MAX)][RENDER_TEXTURE_SAMPLER_COUNT_MAX];
2221 GxRenderSamplerState _samplerStateSet[static_cast<u32>(RENDER_SHADER::MAX)][RENDER_TEXTURE_SAMPLER_COUNT_MAX];
2222 GxRenderShader* _pShaderSet[static_cast<u32>(RENDER_SHADER::MAX)];
2223 GxRenderVertexDeclaration* _pVertexDeclarationSet;
2225 GxNativeBuffer _zCullBuffer;
2226 u32 _zCullBufferSize;
2227 GxRawAllocator* _pShaderPoolAllocator;
2228 GxRawAllocator* _pCommonPoolAllocator;
2229 GxNativeMemoryPool* _pShaderPool;
2230 GxNativeMemoryPool* _pCommonPool;
2231 void* _pGraphicsAllocator;
2232 void* _pGraphicsAllocatorMemory;
2233 void* _pFirmwareMemory;
2234 GxTexturePoolManager* _pTexturePoolManager;
2235 GxFrameworkManager* _pFrameworkManager;
2236 void* _pQueueMemory;
2237 GxNativeDevice _device;
2238 GxNativeQueue _queue;
2239 GxNativeCommandBuffer* _pCommandBuffer;
2240 GxNativeCommandHandle _commandHandle;
2241 GxNativeMemoryPool* _pCommandBufferPool;
2242 void* _pControlBufferPool;
2243 GxNativeSync _commandBufferSync;
2244 u32 _nativeCommandBufferSize;
2245 u32 _commandBufferUsedMax;
2246 u32 _controlBufferSize;
2247 GxNativeMemoryPool* _pShaderScratchMemoryPool;
2248 u32 _shaderScratchMemorySize;
2249 u32 _shaderScratchMemoryCurrent;
2250 u32 _uniformBlockBufferSize;
2251 u32 _controlBufferUsedMax;
2252 u32 _dirtyState;
2253
2254 GxNativeVertexStreamState _vertexStreamStateWork[RENDER_VERTEX_STREAM_COUNT_MAX];
2255 GxNativeBufferRange _vertexBufferBindListWork[RENDER_VERTEX_STREAM_COUNT_MAX];
2256 GxNativeColorState _colorStateNow;
2257 GxNativePolygonState _polygonStateNow;
2258 GxNativeMultiSampleState _multisampleStateNow;
2259 GxNativeDepthStencilState _depthStencilStateNow;
2260
2261#if GX_DEVELOP
2262 GxGpuCounter* _pGpuCounter;
2263#endif // GX_DEVELOP
2264#elif defined(_PS4)
2265#if GX_ENABLE_NEO
2266 GX_NEO_RENDER_MODE _neoRenderMode;
2267#endif // GX_ENABLE_NEO
2268#elif defined(_PS5)
2269 s32 _videoHandle;
2270 u32 _constBufferSize;
2271#endif //_PS5
2272
2274};
2275
2276//===========================================================================
2279//===========================================================================
2281{
2282 //-------------------------------------------------------------
2284 //-------------------------------------------------------------
2286public:
2287 GX_RTTI_CLASS(GxRenderThread, GxThread)
2288 // GxClassBaseReference継承クラス用禁止宣言
2290 // new, delete定義
2291 GX_OPERATOR_NEW_DELETE(GxAllocatorList::ALLOCATOR_TYPE::RENDER)
2292
2293 friend class GxRenderDevice;
2294
2296 //-------------------------------------------------------------
2298 //-------------------------------------------------------------
2300private:
2302 GxRenderThread(void);
2303
2305 //-------------------------------------------------------------
2307 //-------------------------------------------------------------
2309protected:
2311 GX_FORCE_INLINE b32 waitStartEvent(s32 milliSecond = -1) { return _startEvent.waitEvent(milliSecond); }
2313 GX_FORCE_INLINE b32 setStartEvent(void) { return _startEvent.setEvent(); }
2315 GX_FORCE_INLINE b32 waitCompleteEvent(s32 milliSecond = -1) { return _completeEvent.waitEvent(milliSecond); }
2317 GX_FORCE_INLINE b32 setCompleteEvent(void) { return _completeEvent.setEvent(); }
2319 GX_FORCE_INLINE void setRequestStop(void) { _requestStopFlag = true; }
2321 GX_FORCE_INLINE b32 isRequestStop(void) const { return _requestStopFlag; }
2322
2324 void threadMain(void* pArgument) override;
2325
2327 //-------------------------------------------------------------
2329 //-------------------------------------------------------------
2331protected:
2335
2337};
2338
2339//===========================================================================
2341//===========================================================================
2348
2349//===========================================================================
2352//===========================================================================
2354{
2355 //-------------------------------------------------------------
2357 //-------------------------------------------------------------
2359public:
2361 // GxClassBase継承クラス用禁止宣言
2363 // new, delete定義
2364 GX_OPERATOR_NEW_DELETE(GxAllocatorList::ALLOCATOR_TYPE::RENDER)
2365
2366 friend class GxRenderDevice;
2367
2369 //-------------------------------------------------------------
2371 //-------------------------------------------------------------
2373private:
2376
2378 //-------------------------------------------------------------
2380 //-------------------------------------------------------------
2382private:
2384 b32 registerRenderResource(GxRenderResource* pRenderResource);
2386 b32 unregisterRenderResource(GxRenderResource* pRenderResource);
2387
2389 GxRenderResource* getRegisterRenderResource(u32 index);
2390
2392 //-----------------------------------------------------------
2394 //-----------------------------------------------------------
2396private:
2398 void getPropertyRenderResource(void* pValue, u32 index);
2400 u32 getPropertyRenderResourceCount(void);
2401
2403 //-------------------------------------------------------------
2405 //-------------------------------------------------------------
2407private:
2408 GxArray _registerArray;
2409 GxCriticalSection _criticalSection;
2410
2412};
2413
2414//===========================================================================
2416//===========================================================================
2422
2423//===========================================================================
2425//===========================================================================
2431
2432//===========================================================================
2434//===========================================================================
2436{
2437 void* _pBuffer;
2438#if GX_USE_OPENGL
2439 u32 _bindingLocationIndex;
2440#endif //GX_USE_OPENGL
2443};
2444
2445//===========================================================================
2447//===========================================================================
2454
2455//===========================================================================
2457//===========================================================================
2463
2464//===========================================================================
2466//===========================================================================
2472
2473//===========================================================================
2475//===========================================================================
2480
2481//===========================================================================
2483//===========================================================================
2490
2491//===========================================================================
2493//===========================================================================
2498
2499//===========================================================================
2501//===========================================================================
2506
2507//===========================================================================
2509//===========================================================================
2514
2515//===========================================================================
2517//===========================================================================
2522
2523//===========================================================================
2525//===========================================================================
2532
2533//===========================================================================
2535//===========================================================================
2541
2542//===========================================================================
2544//===========================================================================
2546{
2547 // メンバなし
2548};
2549
2550//===========================================================================
2552//===========================================================================
2559
2560//===========================================================================
2562//===========================================================================
2570
2571//===========================================================================
2573//===========================================================================
2587
2588//===========================================================================
2590//===========================================================================
2598
2599//===========================================================================
2601//===========================================================================
2613
2614#if GX_ENABLE_COMPUTE_SHADER
2615//===========================================================================
2617//===========================================================================
2618struct GxRenderDevice::GxCommandDispatch
2619{
2620 GxRegisterSet _registerSet;
2621 u32 _threadGroupCountX;
2622 u32 _threadGroupCountY;
2623 u32 _threadGroupCountZ;
2624};
2625#endif //GX_ENABLE_COMPUTE_SHADER
2626
2627#if GX_ENABLE_OCCLUSION_CULLING
2628//===========================================================================
2630//===========================================================================
2631struct GxRenderDevice::GxCommandResolveOcclusionQuery
2632{
2633 // メンバなし
2634};
2635#endif //GX_ENABLE_OCCLUSION_CULLING
2636
2637//===========================================================================
2639//===========================================================================
2647
2648//===========================================================================
2650//===========================================================================
2658
2659//===========================================================================
2661//===========================================================================
2671
2672//===========================================================================
2674//===========================================================================
2684
2685//===========================================================================
2687//===========================================================================
2698
2699//===========================================================================
2701//===========================================================================
2712
2713//===========================================================================
2715//===========================================================================
2721
2722//===========================================================================
2724//===========================================================================
2729
2730//===========================================================================
2732//===========================================================================
2737
2738//===========================================================================
2740//===========================================================================
2745
2746//===========================================================================
2748//===========================================================================
2755
2756//===========================================================================
2758//===========================================================================
2765
2766#if defined(_NX64)
2767//===========================================================================
2769//===========================================================================
2770struct GxRenderDevice::GxCommandSetTiledCacheAction
2771{
2772 GxNativeTiledCacheAction _action;
2773};
2774
2775//===========================================================================
2777//===========================================================================
2778struct GxRenderDevice::GxCommandSetTiledCacheTileSize
2779{
2780 s32 _width;
2781 s32 _height;
2782};
2783
2784//===========================================================================
2786//===========================================================================
2787struct GxRenderDevice::GxCommandSaveZCullData
2788{
2789 // メンバなし
2790};
2791
2792//===========================================================================
2794//===========================================================================
2795struct GxRenderDevice::GxCommandRestoreZCullData
2796{
2797 // メンバなし
2798};
2799#endif //_NX64
2800
2801#if GX_ENABLE_HTILE_STENCIL_MASK
2802//===========================================================================
2804//===========================================================================
2805struct GxRenderDevice::GxCommandMaskHtileStencilRegion
2806{
2807 GxRenderComputeShader* _pComputeShader;
2808 GxRenderTexture* _pDepthStencil;
2809 f32 _outTan;
2810 f32 _inTan;
2811 f32 _topTan;
2812 f32 _bottomTan;
2813 f32 _cutOff;
2814 f32 _cutOut;
2815};
2816#endif // GX_ENABLE_HTILE_STENCIL_MASK
2817
2818// アクセスインターフェース
2819GX_FORCE_INLINE GxRenderDevice* getGxRenderDevice(void){ return GxRenderDevice::getSingletonPointer(); }
2820#if GX_USE_DX11
2821//---------------------------------------------------------------------------
2825//---------------------------------------------------------------------------
2826template<class STATE, class DESC, typename GxD3D11CreateStateFunction<STATE,DESC>::type CREATE_STATE>
2827STATE* GxD3D11StateTable<STATE, DESC, CREATE_STATE>::get(const DESC& desc)
2828{
2829 const u32 hash = GxMath::getHash32(const_cast<DESC*>(&desc), sizeof(desc));
2830
2831 for(u32 i = 0; i < _table.getCount(); i++)
2832 {
2833 auto* pEntry = static_cast<GxD3D11StateEntry*>(_table[i]);
2834 if( (pEntry->_hash == hash) && (GX_MEMCMP(&pEntry->_desc, &desc, sizeof(desc)) == 0) )
2835 {
2836 return pEntry->_pState;
2837 }
2838 }
2839
2840 auto* pEntry = static_cast<GxD3D11StateEntry*>(GX_ALLOCATE_MEMORY(getGxAllocatorList(GxAllocatorList::ALLOCATOR_TYPE::RENDER), sizeof(GxD3D11StateEntry)));
2841 {
2842 pEntry->_hash = hash;
2843 pEntry->_desc = desc;
2844 (getGxRenderDevice()->getDevice()->*CREATE_STATE)(&pEntry->_desc, &pEntry->_pState);
2845 }
2846 _table.addBottom(pEntry);
2847 return pEntry->_pState;
2848}
2849#endif //GX_USE_DX11
2850
2851//===========================================================================
2853//===========================================================================
2854#if GX_USE_DX11 || GX_USE_DX12
2855#if defined(_DEBUG)
2856extern HRESULT __GxCheckDXResult(GX_CSTR file, const s32 sline, GX_CSTR expression, HRESULT result);
2857#define GX_CHECK_DX_RESULT(expression) __GxCheckDXResult(__FILE__, __LINE__, #expression, (expression))
2858#else // _DEBUG
2859#define GX_CHECK_DX_RESULT(expression) (expression)
2860#endif // !_DEBUG
2861#endif // GX_USE_DX11 || GX_USE_DX12
2862
2863GX_CORE_NAMESPACE_END()
2864
2865#include "GxRenderDevice.inl"
#define GX_ALLOCATE_MEMORY(pAllocatorList, size)
Definition GxAllocator.h:536
#define GX_SAFE_FREE_MEMORY(pAddress)
Definition GxAllocator.h:594
#define GX_PROHIBIT_CLASS_BASE_REFERENCE(__CLASS__)
GxClassBaseReference継承の禁止宣言(new以外の生成禁止 + コピー禁止)
Definition GxBase.h:244
#define GX_SAFE_RELEASE(__POINTER__)
解放(参照カウンタを使用する場合)
Definition GxBase.h:316
#define GX_PROHIBIT_CLASS_BASE(__CLASS__)
GxClassBase継承の禁止宣言
Definition GxBase.h:240
void GxTypedObject
その他
Definition GxDefine.h:213
u32 GX_HANDLE
ハンドル
Definition GxDefine.h:214
@ NONE
何もしない
RENDER_VIEW
描画優先度(ビュー)
Definition GxRender.h:442
@ MAX
定義数
RENDER_ANTI_ALIASING
アンチエイリアシング
Definition GxRender.h:382
RENDER_QUERY_TYPE
クエリタイプ
Definition GxRender.h:1228
RENDER_FORMAT
フォーマット
Definition GxRender.h:269
RENDER_INDEX_TYPE
インデックスバッファ形式
Definition GxRender.h:147
RENDER_STATE
描画ステート
Definition GxRender.h:550
@ MAX
定義数
RENDER_PRIMITIVE_TYPE
プリミティブ形式
Definition GxRender.h:131
RENDER_FRAME_RATE
フレームレート
Definition GxRender.h:97
RENDER_SHADER
Definition GxRender.h:75
@ MAX
定義数
@ DRAW_MAX
描画用の定義数
RENDER_PASS
描画優先度(パス)
Definition GxRender.h:515
@ RENDER_MARKER_NEST_COUNT
マーカーのネストできる数
Definition GxRender.h:43
@ RENDER_TEXTURE_COUNT_MAX
同時読み込み可能なテクスチャ数(0は無効を表すので、実際は4095枚)
Definition GxRender.h:40
@ RENDER_TEXTURE_SAMPLER_COUNT_MAX
サポートするテクスチャサンプラ数
Definition GxRender.h:37
@ RENDER_TEXTURE_SAMPLER_UAV_COUNT_MAX
サポートするUAVテクスチャサンプラ数
Definition GxRender.h:39
@ RENDER_SHADER_CONST_MAX
サポートするシェーダレジスタ数
Definition GxRender.h:29
@ RENDER_MARKER_NAME_LENGTH
マーカー名の文字列長
Definition GxRender.h:42
@ RENDER_TARGET_COUNT_MAX
サポートするレンダーターゲット数
Definition GxRender.h:24
@ RENDER_VERTEX_STREAM_COUNT_MAX
サポートする頂点ストリーム数
Definition GxRender.h:26
RENDER_SUB_VIEW
描画優先度(サブビュー)
Definition GxRender.h:485
@ MAX
定義数
u32(* GX_RENDERDEVICE_ERROR_FUNCTION)(GX_CSTR message, u32 returnValue, u32 errorId, u32 value)
Definition GxRenderDevice.h:40
フレームアロケータ
Definition GxAllocatorFrame.h:19
@ RENDER
レンダリング
配列クラス
Definition GxArray.h:18
ハンドラ基本クラス
Definition GxCallback.h:27
オブジェクト基底クラス
Definition GxBase.h:88
クリティカルセクションクラス
Definition GxThread.h:20
イベントクラス
Definition GxThread.h:132
b32 setEvent(void)
イベントを設定
Definition GxThread.cpp:268
b32 waitEvent(s32 milliSecond=-1)
イベント待機
Definition GxThread.cpp:291
JSON解析用ノード
Definition GxJson.h:108
GX_FORCE_INLINE s32 getS32(void) const
S32値を取得
Definition GxJson.h:149
連想配列クラス
Definition GxMap.h:19
static u32 getHash32(void *pData, u32 size)
ハッシュ値取得(32bit、データ、サイズ指定版)
Definition GxMath.cpp:241
static constexpr u32 VALUE_1K
1K
Definition GxMath.h:129
static constexpr u32 VALUE_32K
32K
Definition GxMath.h:134
static constexpr u32 VALUE_8K
8K
Definition GxMath.h:132
プロパティクラス
Definition GxProperty.h:48
コンピュートシェーダを管理する
Definition GxRenderComputeShader.h:21
描画コマンドの並列発行を管理します。
Definition GxRenderContext.h:28
Definition GxRenderDevice.h:497
static constexpr GxPriority::priorityType priorityValueMax
プライオリティ最大値
Definition GxRenderDevice.h:501
管理ブロックを外部に置くことで特殊メモリなど無駄なく使いたい場合
Definition GxRenderDevice.inl:206
描画リソースの管理を行います
Definition GxRenderDevice.h:2354
描画命令を発行するスレッドを管理します
Definition GxRenderDevice.h:2281
GX_FORCE_INLINE b32 isRequestStop(void) const
停止リクエストチェック
Definition GxRenderDevice.h:2321
GxEvent _startEvent
開始イベント
Definition GxRenderDevice.h:2332
GX_FORCE_INLINE void setRequestStop(void)
停止リクエスト設定
Definition GxRenderDevice.h:2319
GxEvent _completeEvent
完了イベント
Definition GxRenderDevice.h:2333
GX_FORCE_INLINE b32 waitCompleteEvent(s32 milliSecond=-1)
完了イベント待ち
Definition GxRenderDevice.h:2315
GX_FORCE_INLINE b32 setStartEvent(void)
開始イベント開始
Definition GxRenderDevice.h:2313
void threadMain(void *pArgument) override
描画ループ
Definition GxRenderDevice.cpp:11620
GX_FORCE_INLINE b32 setCompleteEvent(void)
完了イベント開始
Definition GxRenderDevice.h:2317
b32 _requestStopFlag
停止リクエストフラグ
Definition GxRenderDevice.h:2334
GX_FORCE_INLINE b32 waitStartEvent(s32 milliSecond=-1)
開始イベント待ち
Definition GxRenderDevice.h:2311
VRAM を管理します
Definition GxRenderDevice.inl:30
描画関連の依存をこのクラスで吸収します
Definition GxRenderDevice.h:450
constexpr void setGamma(f32 gamma)
ガンマ補正値の設定
Definition GxRenderDevice.h:1029
constexpr u32 getWriteBuffer(void) const
書き込むバッファIndexの取得
Definition GxRenderDevice.h:1032
b32 unloadResource(void)
リソースアンロード関数
Definition GxRenderDevice.cpp:2962
constexpr f32 getGpuFrameTime(void) const
GPUフレーム時間の取得
Definition GxRenderDevice.h:1006
GxRenderVertexDeclaration * createVertexDeclaration(const GxRenderVertexElement *pElements)
頂点宣言を作成
Definition GxRenderDevice.cpp:3863
GX_FORCE_INLINE b32 getFrameAverageAvailable(void) const
平均フレームの値が有効か
Definition GxRenderDevice.h:1010
GX_FORCE_INLINE const GxString & getDeviceName(void) const
デバイス名を取得
Definition GxRenderDevice.h:1049
static constexpr u32 FRAME_TIME_LOG_COUNT_I
フレーム時間ログ数(間欠)
Definition GxRenderDevice.h:919
void stopRenderThread(void)
プレゼントパラメータ作成
Definition GxRenderDevice.cpp:2664
GxRenderVertexBuffer * createVertexBuffer(u32 size, u32 attribute)
頂点バッファ作成
Definition GxRenderDevice.cpp:3815
GxRenderTexture * createRenderTarget(const GxSize &size, RENDER_FORMAT format, RENDER_ANTI_ALIASING antiAliasing, u32 attribute)
レンダーターゲットを作成
Definition GxRenderDevice.cpp:4005
GX_FORCE_INLINE u32 getMaxSkinningJointCount(void)
1メッシュに使用する最大のジョイント数
Definition GxRenderDevice.inl:363
constexpr f32 getFrameTime(void) const
最新フレーム時間の取得
Definition GxRenderDevice.h:1002
constexpr f32 getFrameRate(void) const
最新フレームレートの取得
Definition GxRenderDevice.h:998
constexpr f32 getFrameTimeAverage(void) const
平均フレーム時間の取得
Definition GxRenderDevice.h:1004
constexpr u32 getRenderBuffer(void) const
描画するバッファIndexの取得
Definition GxRenderDevice.h:1034
constexpr f32 getAspectRatio(void) const
アスペクト比の取得
Definition GxRenderDevice.h:1025
GX_FORCE_INLINE GxVector2 getResolutionScaleTextureSSAO(void) const
SSAOテクスチャの解像度拡縮率を取得
Definition GxRenderDevice.h:1380
void freeUserScreenshotBuffer(void)
ユーザースクリーンショットバッファを解放
Definition GxRenderDevice.cpp:10700
void startRender(void)
描画開始
Definition GxRenderDevice.cpp:9896
f32 getFrameRateTargetF32(void)
目標フレームレートの取得(f32)
Definition GxRenderDevice.cpp:3100
GX_FORCE_INLINE b32 isCpuRenderSkipping(void) const
現在のフレームのCPU描画処理がスキップされている
Definition GxRenderDevice.h:1014
void setDefaultState(void)
デフォルトステート設定
Definition GxRenderDevice.cpp:7607
void storeState(void)
ステートキャッシュをストア
Definition GxRenderDevice.cpp:5650
static constexpr u32 COMMAND_BLOCK_SIZE
コマンドブロックサイズ
Definition GxRenderDevice.h:923
GxRenderTexture * createTexture3D(const GxSize &size, u32 depth, u32 mipLevel, RENDER_FORMAT format, u32 attribute)
テクスチャを作成(3D)
Definition GxRenderDevice.cpp:3953
void buildCommand(void)
描画コマンド作成
Definition GxRenderDevice.cpp:9623
GX_FORCE_INLINE b32 isDisableShadowPass(void) const
シャドウパスの処理を無効にしているか否かを取得
Definition GxRenderDevice.h:1406
GX_FORCE_INLINE size_t getLocalMemorySize(void) const
VRAMローカルメモリ(ビデオメモリ)サイズ取得
Definition GxRenderDevice.inl:841
void setFrameRateTarget(RENDER_FRAME_RATE frameRate)
目標フレームレートの設定
Definition GxRenderDevice.cpp:3144
GX_FORCE_INLINE size_t getFreeMainMemorySize(void) const
VRAMメインメモリ(GPUからアクセス可能なメインメモリやドライバ目的のメモリ)空きサイズ取得
Definition GxRenderDevice.inl:831
GX_FORCE_INLINE GxRenderTexture * getTextureByHandle(GX_HANDLE handle) const
ハンドルからテクスチャを取得
Definition GxRenderDevice.inl:342
void flushGpuCommandBuffer(void)
GPUコマンドバッファのフラッシュ
Definition GxRenderDevice.cpp:10298
void begin(void)
描画パケット収集開始
Definition GxRenderDevice.cpp:9562
static constexpr u32 PACKET_BLOCK_SIZE
パケットブロックサイズ
Definition GxRenderDevice.h:921
GX_FORCE_INLINE const GxSize & getOutputResolution(void) const
出力解像度の取得
Definition GxRenderDevice.h:1017
GX_FORCE_INLINE size_t getMainMemorySize(void) const
VRAMメインメモリ(GPUからアクセス可能なメインメモリやドライバ目的のメモリ)サイズ取得
Definition GxRenderDevice.inl:821
void unsetAllRenderResource(void)
全描画リソースの設定解除
Definition GxRenderDevice.cpp:7738
GX_FORCE_INLINE b32 isNormalMap16FP() const
ノーマルマップが16ビットfloatかを取得
Definition GxRenderDevice.h:1434
GX_FORCE_INLINE void setResolutionScaleTextureSSAO(const GxVector2 &scale)
SSAOテクスチャの解像度拡縮率を設定
Definition GxRenderDevice.h:1382
constexpr RENDER_FRAME_RATE getFrameRateTarget(void) const
目標フレームレートの取得
Definition GxRenderDevice.h:992
GX_FORCE_INLINE GxRenderTexture * getBackBufferDepthStencil(void) const
バックバッファ用深度ステンシルを取得
Definition GxRenderDevice.h:1384
void storeVertexDataState(void)
頂点ステートキャッシュをストア
Definition GxRenderDevice.cpp:5722
COMMAND_TYPE
コマンドタイプ
Definition GxRenderDevice.h:528
@ SET_VIEWPORT
ビューポートの設定
@ DRAW_INDEXED
インデックスあり描画
@ SET_DEPTH_TEST_STATE
深度テストステートの設定
@ SET_RENDER_TARGET
レンダーターゲットの設定
@ SET_DEPTH_STENCIL
深度ステンシルの設定
@ DRAW
インデックスなし描画
@ CALLBACK_
コールバック
@ CALLBACK_COPYARG
コールバック 引数をコンテキストにコピーする
@ DRAW_INDEXED_MEMORY
インデックスあり描画(メインメモリ)
@ COPY_RENDER_TARGET_TO_TEXTURE_WITH_MIPMAP
レンダーターゲットをテクスチャにミップマップつきでコピーする
@ CLEAR_HDR
画面クリア(HDR)
@ FLUSH_GPU_COMMAND_BUFFER
GPUコマンドバッファのフラッシュ
@ SET_RENDER_STATE
描画ステートの設定
@ SET_ALPHA_TEST_STATE
アルファテストステートの設定
@ DRAW_MEMORY
インデックスなし描画(メインメモリ)
@ COPY_DEPTH_STENCIL_TO_TEXTURE
深度ステンシルをテクスチャにコピーする
@ COPY_RENDER_TARGET_TO_TEXTURE
レンダーターゲットをテクスチャにコピーする
@ SET_PREDICATION
プレディケーションの設定
@ SET_BLEND_STATE
ブレンドステートの設定
@ COPY_DEPTH_STENCIL_TO_TEXTURE_STRETCH
深度ステンシルをテクスチャに拡大/縮小コピーする
@ SET_STENCIL_TEST_STATE
ステンシルテストステートの設定
@ SET_SCISSOR_RECT
シザリング矩形の設定
@ COPY_RENDER_TARGET_TO_TEXTURE_STRETCH
レンダーターゲットをテクスチャに拡大/縮小コピーする
@ FORCE_DRAW_STATE
描画ステート強制変更
void sync(void)
描画終了待ち
Definition GxRenderDevice.cpp:9688
static constexpr u32 FRAME_TIME_LOG_COUNT
フレーム時間ログ数
Definition GxRenderDevice.h:917
constexpr u64 getGpuTimeStampFrequency(void) const
GPUタイムスタンプ周波数の取得
Definition GxRenderDevice.h:1008
void terminate(void)
終了関数
Definition GxRenderDevice.cpp:2686
GX_FORCE_INLINE void setDisableProcedualPass(b32 disable)
プロシージャルパスの処理を無効にするか否かの設定
Definition GxRenderDevice.h:1419
constexpr f32 getFrameRateAverage(void) const
平均フレームレートの取得
Definition GxRenderDevice.h:1000
b32 initialize(const GxRenderDeviceInitialInformation *pInitialInformation)
初期化関数
Definition GxRenderDevice.cpp:1017
b32 requestSaveUserScreenshot(void)
Master用スクリーンショット保存リクエスト
Definition GxRenderDevice.cpp:10663
constexpr u32 getContextBufferCount(void) const
コンテキストのバッファ数を取得
Definition GxRenderDevice.h:1699
void forceDrawState(const GxCommandForceDrawState *pCommand)
描画ステート強制変更
Definition GxRenderDevice.cpp:7781
u32 * getUserScreenshotBuffer(GxSize &size)
ユーザースクリーンショットバッファを取得
Definition GxRenderDevice.cpp:10689
GX_FORCE_INLINE size_t getFreeLocalMemorySize(void) const
VRAMローカルメモリ(ビデオメモリ)空きサイズ取得
Definition GxRenderDevice.inl:851
GX_FORCE_INLINE void * allocateCommandBufferMemory(u32 size)
コマンドバッファメモリから確保
Definition GxRenderDevice.inl:418
GX_FORCE_INLINE void setDisableOverPaintPass(b32 disable)
オーバーペイントの処理を無効にするか否かの設定
Definition GxRenderDevice.h:1409
void renderBlankScreen(void)
初期化中のブランク画面描画
Definition GxRenderDevice.cpp:9934
GX_FORCE_INLINE f32 getElapsedFrameTime(void) const
現在のフレームの経過時間を取得
Definition GxRenderDevice.h:990
GX_FORCE_INLINE GxRenderTexture * getBackBuffer(void) const
バックバッファを取得
Definition GxRenderDevice.h:1039
GxRenderDevice(void)
デフォルトコンストラクタ
Definition GxRenderDevice.cpp:774
void setAllContextPriority(RENDER_VIEW view, RENDER_SUB_VIEW subView, RENDER_PASS pass, u32 subPriority)
全コンテキストのプライオリティを設定する
Definition GxRenderDevice.cpp:9541
GX_FORCE_INLINE b32 isUseDummyShader(void) const
マスターでコンパイルされていないバリエーションが実行されようとしたときに
Definition GxRenderDevice.h:1424
GX_FORCE_INLINE size_t getTotalAllocatedHighLocalMemorySize(void) const
VRAMローカルメモリ最大到達サイズ取得
Definition GxRenderDevice.inl:861
GX_FORCE_INLINE void setDisableShadowPass(b32 disable)
シャドウパスの処理を無効にするか否かの設定
Definition GxRenderDevice.h:1404
constexpr f32 getGamma(void) const
ガンマ補正値の取得
Definition GxRenderDevice.h:1027
GX_FORCE_INLINE b32 isDisableOverPaintPass(void) const
オーバーペイントの処理を無効にしているか否かを取得
Definition GxRenderDevice.h:1411
GxRenderTexture * createTexture2D(const GxSize &size, u32 mipLevel, RENDER_FORMAT format, u32 attribute)
テクスチャを作成(2D)
Definition GxRenderDevice.cpp:3926
GxRenderQuery * createQuery(RENDER_QUERY_TYPE type)
クエリを作成
Definition GxRenderDevice.cpp:4134
GxRenderPixelShader * createShader(const void *pAssembledCode, u32 assembledCodeSize, u32 constantRegisterParameterCount, u32 usageInputSemantics, u32 constantBufferSize)
ピクセルシェーダを作成
Definition GxRenderDevice.h:1328
void measureFPS(void)
FPSの計測
Definition GxRenderDevice.cpp:10384
GxRenderIndexBuffer * createIndexBuffer(u32 size, RENDER_INDEX_TYPE type, u32 attribute)
インデックスバッファを作成
Definition GxRenderDevice.cpp:3840
static void * CACHE_INVALIDATE_POINTER
キャッシュ無効状態ポインタ(問題があれば別途フラグを用意する)
Definition GxRenderDevice.h:733
GX_RENDERDEVICE_ERROR_FUNCTION _pUserErrorFunction
ユーザー定義のエラーコールバック
Definition GxRenderDevice.h:2035
GxRenderTexture * createDepthStencil(const GxSize &size, RENDER_FORMAT format, RENDER_ANTI_ALIASING antiAliasing, u32 attribute)
深度ステンシルを作成
Definition GxRenderDevice.cpp:4111
GxRenderTexture * createTextureCube(const GxSize &size, u32 mipLevel, RENDER_FORMAT format, u32 attribute)
テクスチャを作成(Cube)
Definition GxRenderDevice.cpp:3979
T * createShader(const void *pAssembledCode, u32 assembledCodeSize, u32 constantRegisterParameterCount, u32 usageInputSemantics, u32 constantBufferSize)
シェーダを作成
Definition GxRenderDevice.h:1311
GX_FORCE_INLINE size_t getTotalAllocatedHighMainMemorySize(void) const
VRAMメインメモリ最大到達サイズ取得
Definition GxRenderDevice.inl:871
constexpr void end(void)
描画パケット収集完了
Definition GxRenderDevice.h:1672
b32 loadResource(void)
リソースロード関数
Definition GxRenderDevice.cpp:2922
static constexpr u32 CACHE_INVALIDATE_VALUE
キャッシュ無効状態値(問題があれば別途フラグを用意する)
Definition GxRenderDevice.h:731
b32 initializeThreadLocalStorage(u32 workerThreadIndex)
スレッドローカルストレージ初期化関数
Definition GxRenderDevice.cpp:2976
GX_FORCE_INLINE b32 isDisableProcedualPass(void) const
プロシージャルパスの処理を無効にしているか否かを取得
Definition GxRenderDevice.h:1421
初期化クラス
Definition GxRenderDevice.h:46
u32 _bufferCount
バッファ数
Definition GxRenderDevice.h:180
b32 _disableProcedualPass
プロシージャル無効パス
Definition GxRenderDevice.h:185
b32 _disableOverPaintPass
オーバーペイントパス無効フラグ
Definition GxRenderDevice.h:184
b32 _useBackBufferDepth
深度バックバッファフラグ
Definition GxRenderDevice.h:187
b32 _disableShadowPass
シャドウパス無効フラグ
Definition GxRenderDevice.h:183
GX_RENDERDEVICE_ERROR_FUNCTION _pUserErrorFunction
ユーザー定義のエラーコールバック
Definition GxRenderDevice.h:191
b32 _useDummyShader
ダミーシェーダー使用フラグ
Definition GxRenderDevice.h:186
GxVector2 _resolutionScaleTextureSSAO
SSAO拡縮テクスチャ解像度
Definition GxRenderDevice.h:190
u32 _renderThreadStackSize
描画スレッドスタックサイズ
Definition GxRenderDevice.h:182
RENDER_FRAME_RATE _frameRateTarget
ターゲットフレームレート
Definition GxRenderDevice.h:179
u32 _commandBufferSize
コマンドバッファサイズ
Definition GxRenderDevice.h:181
b32 _enablePreZSortByDepth
PreZでの深度ソート有効フラグ
Definition GxRenderDevice.h:189
b32 _isNormalMap16FP
FP16法線マップフラグ
Definition GxRenderDevice.h:188
インデックスバッファを管理する
Definition GxRenderIndexBuffer.h:20
描画関連のイベントを通知します
Definition GxRenderNotifier.h:78
描画関連のイベントを通知します
Definition GxRenderNotifier.h:22
ピクセルシェーダを管理する
Definition GxRenderPixelShader.h:20
void releaseDiscardBuffer(b32 isStoreDevelopMemory=true) override
シェーダ命令コードのバッファなど中間データを解放
Definition GxRenderPixelShader.cpp:121
GPUクエリを管理する
Definition GxRenderQuery.h:19
GPUリソースを管理する
Definition GxRenderResource.h:20
シェーダ共通の処理を記述
Definition GxRenderShader.h:20
テクスチャクラス
Definition GxRenderTexture.h:19
頂点バッファを管理する
Definition GxRenderVertexBuffer.h:20
頂点シェーダに渡す頂点の宣言を管理する
Definition GxRenderVertexDeclaration.h:22
頂点シェーダを管理する
Definition GxRenderVertexShader.h:22
ピクセルシェーダリソース
Definition GxResShader.h:247
頂点シェーダリソース
Definition GxResShader.h:164
実行時型情報クラス
Definition GxRtti.h:154
描画システムクラス
Definition GxSysRenderBase.h:115
スレッドクラス
Definition GxThread.h:177
タイマークラス
Definition GxTimer.h:110
u32 getDiff(GxMath::PREFIX prifix=GxMath::PREFIX::NANO) const
差分を取得
Definition GxTimer.cpp:324
カメラ基礎クラス
Definition GxUnitCameraBase.h:20
シングルトン基礎クラス
Definition GxSingleton.h:19
static constexpr GxRenderDevice * getSingletonPointer(void)
Definition GxSingleton.h:59
色(HDR)
Definition GxColor.h:241
Definition GxColor.h:21
座標
Definition GxStruct.h:867
矩形
Definition GxStruct.h:951
アルファテストステート
Definition GxRender.h:731
ブレンドステート
Definition GxRender.h:847
深度テストステート
Definition GxRender.h:601
GPUの性能
Definition GxRenderDevice.h:597
GPU_TYPE
GPUタイプ
Definition GxRenderDevice.h:600
b32 _hardwarePcf
ハードウェアPCF有効フラグ
Definition GxRenderDevice.h:607
GPU_TYPE _gpuType
GPUタイプ
Definition GxRenderDevice.h:606
b32 _alphaToCoverage
アルファトゥカバレッジ有効フラグ
Definition GxRenderDevice.h:608
終点的な、右目でも左目でも含めっている、絵を片付けます
Definition GxRenderDevice.h:2726
u32 _filler
フィルター
Definition GxRenderDevice.h:2727
マーカー開始
Definition GxRenderDevice.h:2734
GX_CHAR _name[RENDER_MARKER_NAME_LENGTH+1]
マーカー名
Definition GxRenderDevice.h:2735
コールバックコマンド
Definition GxRenderDevice.h:2750
GxCallback::GxHandlerBase _handle
ハンドル
Definition GxRenderDevice.h:2751
u32 _argumentSize
引数サイズ
Definition GxRenderDevice.h:2752
u32 _srcSize
入力サイズ
Definition GxRenderDevice.h:2753
コールバックコマンド
Definition GxRenderDevice.h:2343
void * _pArgument
引数
Definition GxRenderDevice.h:2346
GxCallback::GxHandlerBase _handle
ハンドル
Definition GxRenderDevice.h:2344
void * _pSource
呼び出し元
Definition GxRenderDevice.h:2345
画面クリアコマンド(HDR)
Definition GxRenderDevice.h:2652
u32 _clearFlags
クリアフラグ
Definition GxRenderDevice.h:2653
f32 _clearZ
クリアZ値
Definition GxRenderDevice.h:2654
GxColorHDR _clearColor
クリア色
Definition GxRenderDevice.h:2655
u32 _clearStencil
クリアステンシル値
Definition GxRenderDevice.h:2656
画面クリアコマンド
Definition GxRenderDevice.h:2641
GxColor _clearColor
クリア色
Definition GxRenderDevice.h:2643
f32 _clearZ
クリアZ値
Definition GxRenderDevice.h:2644
u32 _clearFlags
クリアフラグ
Definition GxRenderDevice.h:2642
u32 _clearStencil
クリアステンシル値
Definition GxRenderDevice.h:2645
深度ステンシルコピーコマンド
Definition GxRenderDevice.h:2676
u16 _reserve
予備
Definition GxRenderDevice.h:2677
GxRenderTexture * _pTexture
描画テクスチャ
Definition GxRenderDevice.h:2679
u16 _dstMipLevel
出力ミップレベル
Definition GxRenderDevice.h:2678
const GxRect * _pSrcRect
入力矩形アドレス
Definition GxRenderDevice.h:2680
GxPoint2 _dstPoint
出力座標
Definition GxRenderDevice.h:2682
GxRect _srcRect
入力矩形
Definition GxRenderDevice.h:2681
深度ステンシル拡大/縮小コピーコマンド
Definition GxRenderDevice.h:2703
GxRenderTexture * _pTexture
描画テクスチャ
Definition GxRenderDevice.h:2706
const GxRect * _pSrcRect
入力矩形アドレス
Definition GxRenderDevice.h:2707
const GxRect * _pDstRect
出力矩形アドレス
Definition GxRenderDevice.h:2708
u16 _reserve
予備
Definition GxRenderDevice.h:2704
GxRect _srcRect
入力矩形
Definition GxRenderDevice.h:2709
u16 _dstMipLevel
出力ミップレベル
Definition GxRenderDevice.h:2705
GxRect _dstRect
出力矩形
Definition GxRenderDevice.h:2710
レンダーターゲットコピーコマンド
Definition GxRenderDevice.h:2663
GxRenderTexture * _pTexture
描画テクスチャ
Definition GxRenderDevice.h:2666
GxPoint2 _dstPoint
出力座標
Definition GxRenderDevice.h:2669
GxRect _srcRect
入力矩形
Definition GxRenderDevice.h:2668
const GxRect * _pSrcRect
入力矩形アドレス
Definition GxRenderDevice.h:2667
u16 _dstMipLevel
出力先ミップレベル
Definition GxRenderDevice.h:2665
u16 _index
インデックス
Definition GxRenderDevice.h:2664
レンダーターゲット拡大/縮小コピーコマンド
Definition GxRenderDevice.h:2689
u16 _index
インデックス
Definition GxRenderDevice.h:2690
GxRect _dstRect
出力矩形
Definition GxRenderDevice.h:2696
GxRect _srcRect
入力矩形
Definition GxRenderDevice.h:2695
const GxRect * _pDstRect
出力矩形アドレス
Definition GxRenderDevice.h:2694
const GxRect * _pSrcRect
入力矩形アドレス
Definition GxRenderDevice.h:2693
u16 _dstMipLevel
出力ミップレベル
Definition GxRenderDevice.h:2691
GxRenderTexture * _pTexture
描画テクスチャ
Definition GxRenderDevice.h:2692
レンダーターゲットミップマップコピーコマンド
Definition GxRenderDevice.h:2717
GxRenderTexture * _pTexture
描画テクスチャ
Definition GxRenderDevice.h:2719
u32 _index
インデックス
Definition GxRenderDevice.h:2718
インデックスなし描画コマンド
Definition GxRenderDevice.h:2564
RENDER_PRIMITIVE_TYPE _type
プリミティブタイプ
Definition GxRenderDevice.h:2566
u32 _vertexCount
頂点数
Definition GxRenderDevice.h:2568
u32 _startVertex
開始頂点
Definition GxRenderDevice.h:2567
GxVertexStream _vertexStream[RENDER_VERTEX_STREAM_COUNT_MAX]
頂点ストリーム
Definition GxRenderDevice.h:2565
インデックスあり描画コマンド
Definition GxRenderDevice.h:2575
s32 _baseVertexIndex
基準頂点インデックス
Definition GxRenderDevice.h:2579
s32 * _pQueryIndex
クエリインデックスのアドレス
Definition GxRenderDevice.h:2585
u32 _indexCount
インデックス数
Definition GxRenderDevice.h:2583
u32 _startIndex
開始インデックス
Definition GxRenderDevice.h:2582
GxRenderIndexBuffer * _pIndexBuffer
インデックスバッファ
Definition GxRenderDevice.h:2577
u32 _instanceCount
インスタンス数
Definition GxRenderDevice.h:2584
u32 _vertexCount
頂点数
Definition GxRenderDevice.h:2581
GxVertexStream _vertexStream[RENDER_VERTEX_STREAM_COUNT_MAX]
頂点ストリーム
Definition GxRenderDevice.h:2576
u32 _minIndex
最小インデックス
Definition GxRenderDevice.h:2580
RENDER_PRIMITIVE_TYPE _type
プリミティブタイプ
Definition GxRenderDevice.h:2578
インデックスあり描画(メインメモリ)コマンド
Definition GxRenderDevice.h:2603
const void * _pVertex
頂点データ
Definition GxRenderDevice.h:2608
u32 _minIndex
最小インデックス
Definition GxRenderDevice.h:2605
RENDER_INDEX_TYPE _indexType
インデックスタイプ
Definition GxRenderDevice.h:2611
u32 _vertexCount
頂点数
Definition GxRenderDevice.h:2606
u32 _vertexStride
頂点ストライド
Definition GxRenderDevice.h:2610
RENDER_PRIMITIVE_TYPE _type
プリミティブタイプ
Definition GxRenderDevice.h:2604
const void * _pIndex
インデックスデータ
Definition GxRenderDevice.h:2609
u32 _indexCount
インデックス数
Definition GxRenderDevice.h:2607
インデックスなし描画(メインメモリ)コマンド
Definition GxRenderDevice.h:2592
u32 _vertexStride
頂点ストライド
Definition GxRenderDevice.h:2596
u32 _vertexCount
頂点数
Definition GxRenderDevice.h:2594
RENDER_PRIMITIVE_TYPE _type
プリミティブタイプ
Definition GxRenderDevice.h:2593
const void * _pVertex
頂点データ
Definition GxRenderDevice.h:2595
マーカー終了
Definition GxRenderDevice.h:2742
GX_CHAR _name[RENDER_MARKER_NAME_LENGTH+1]
マーカー名
Definition GxRenderDevice.h:2743
描画ステート強制変更コマンド
Definition GxRenderDevice.h:2546
頂点ストリームステート強制変更コマンド
Definition GxRenderDevice.h:2554
u32 _stride
ストライド
Definition GxRenderDevice.h:2556
u32 _stream
ストリーム
Definition GxRenderDevice.h:2555
u32 _frequency
頻度
Definition GxRenderDevice.h:2557
描画コマンド情報
Definition GxRenderDevice.h:2418
GxRenderDevice::COMMAND_TYPE _type
コマンドタイプ
Definition GxRenderDevice.h:2419
u32 _size
コマンドサイズ
Definition GxRenderDevice.h:2420
アルファテストステート設定コマンド
Definition GxRenderDevice.h:2495
GxRenderAlphaTestState _state
ステート
Definition GxRenderDevice.h:2496
ブレンドステート設定コマンド
Definition GxRenderDevice.h:2503
GxRenderBlendState _state
ステート
Definition GxRenderDevice.h:2504
深度ステンシル設定コマンド
Definition GxRenderDevice.h:2537
b32 _readOnly
読み込み専用
Definition GxRenderDevice.h:2539
GxRenderTexture * _pDepthStencil
深度ステンシル
Definition GxRenderDevice.h:2538
Zテストステート設定コマンド
Definition GxRenderDevice.h:2477
GxRenderDepthTestState _state
ステート
Definition GxRenderDevice.h:2478
プレディケーション設定コマンド
Definition GxRenderDevice.h:2760
u32 _size
サイズ
Definition GxRenderDevice.h:2762
b32 _value
Definition GxRenderDevice.h:2763
void * _pFlag
フラグ
Definition GxRenderDevice.h:2761
描画ステート設定コマンド
Definition GxRenderDevice.h:2468
RENDER_STATE _renderState
レンダーステート
Definition GxRenderDevice.h:2469
u32 _value
Definition GxRenderDevice.h:2470
レンダーターゲット設定コマンド
Definition GxRenderDevice.h:2527
u32 _index
インデックス
Definition GxRenderDevice.h:2528
GxRenderTexture * _pRenderTarget
レンダーターゲット
Definition GxRenderDevice.h:2529
b32 _forceRenderToTexture
テクスチャ強制描画
Definition GxRenderDevice.h:2530
シザリング矩形設定コマンド
Definition GxRenderDevice.h:2519
GxRect _rect
矩形
Definition GxRenderDevice.h:2520
ステンシルテストステート設定コマンド
Definition GxRenderDevice.h:2485
GxRenderStencilTestState _state
ステート
Definition GxRenderDevice.h:2486
b32 _stencilTwoSideEnable
2方向の有効フラグ
Definition GxRenderDevice.h:2488
u32 _stencilRef
ステート参照
Definition GxRenderDevice.h:2487
ビューポート設定コマンド
Definition GxRenderDevice.h:2511
GxViewportData _viewportData
ビューポート情報
Definition GxRenderDevice.h:2512
描画コマンド共通情報
Definition GxRenderDevice.h:2459
GxRegisterSet _registerSet[static_cast< u32 >(RENDER_SHADER::DRAW_MAX)]
レジスタセット情報
Definition GxRenderDevice.h:2461
GxRenderVertexDeclaration * _pVertexDeclaration
頂点定義
Definition GxRenderDevice.h:2460
描画パケット
Definition GxRenderDevice.h:2427
GxPriority::GxPriorityUnion _priority
優先度
Definition GxRenderDevice.h:2428
GxCommandInformation * _pCommandInfo
コマンド情報のポインタ
Definition GxRenderDevice.h:2429
レジスタ情報
Definition GxRenderDevice.h:2436
u32 _start
開始位置
Definition GxRenderDevice.h:2442
u32 _count
レジスタ数
Definition GxRenderDevice.h:2441
void * _pBuffer
バッファ
Definition GxRenderDevice.h:2437
レジスタセット情報
Definition GxRenderDevice.h:2449
GxRenderShader * _pShader
シェーダー
Definition GxRenderDevice.h:2450
GxRegisterInformation * _pRegisterInformation[static_cast< s32 >(GxRenderShader::REGISTER_SET_TYPE::MAX)]
レジスタ情報
Definition GxRenderDevice.h:2451
u8 _registerInformationCount[static_cast< s32 >(GxRenderShader::REGISTER_SET_TYPE::MAX)]
レジスタ情報数
Definition GxRenderDevice.h:2452
頂点ストリーム情報
Definition GxRenderDevice.h:480
u64 _access64
データ
Definition GxRenderDevice.h:490
u16 _offset
オフセット
Definition GxRenderDevice.h:486
GxRenderVertexBuffer * _pVertexBuffer
頂点バッファ
Definition GxRenderDevice.h:485
u8 _stride
ストライド
Definition GxRenderDevice.h:487
u8 _frequencyType
頻度タイプ
Definition GxRenderDevice.h:488
ビューポートデータ
Definition GxRenderDevice.h:588
GxRect _rect
矩形
Definition GxRenderDevice.h:589
f32 _farZ
farクリップ
Definition GxRenderDevice.h:591
f32 _nearZ
nearクリップ
Definition GxRenderDevice.h:590
GxRawAllocator の設定
Definition GxRenderDevice.h:111
constexpr void setSize(u64 size, u32 maxBlockCount)
設定
Definition GxRenderDevice.h:132
GxRawAllocatorInfo(u64 size, u32 blockCount)
Definition GxRenderDevice.h:120
u64 _size
サイズ
Definition GxRenderDevice.h:144
u32 _maxBlockCount
最大ブロック数
Definition GxRenderDevice.h:145
サンプラステート
Definition GxRender.h:1046
ステンシルテストステート
Definition GxRender.h:654
頂点宣言に使用する、頂点要素を定義するための構造体
Definition GxRenderVertexDeclaration.h:125
Definition GxSharedContext.h:21
サイズ
Definition GxStruct.h:730
文字列型クラス
Definition GxString.h:18
Definition GxBase.h:24
2次元ベクトル
Definition GxVector.h:34
3次元ベクトル
Definition GxVector.h:245
4次元ベクトル
Definition GxVector.h:582
32bitブーリアン
Definition GxDefine.h:173
描画優先度
Definition GxRenderDevice.h:505
u32 _subPriority
サブプライオリティ
Definition GxRenderDevice.h:519
priorityType _priorityValue
プライオリティ64Bitアクセス
Definition GxRenderDevice.h:522
u32 _reserved
予備
Definition GxRenderDevice.h:515
RENDER_VIEW _view
ビュー
Definition GxRenderDevice.h:516
RENDER_PASS _pass
パス
Definition GxRenderDevice.h:518
RENDER_SUB_VIEW _subView
サブビュー
Definition GxRenderDevice.h:517