UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
OpenGLDrv.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 OpenGLDrv.h: Public OpenGL RHI definitions.
5=============================================================================*/
6
7#pragma once
8
9// Dependencies.
10
11#include "CoreMinimal.h"
13#include "IOpenGLDynamicRHI.h"
14#include "RHIDefinitions.h"
15#include "RHI.h"
16#include "GPUProfiler.h"
17#include "RenderResource.h"
18#include "Templates/EnableIf.h"
20
21#include "OpenGLState.h"
22#include "OpenGLPlatform.h"
23#include "OpenGLUtil.h"
24#include "RenderUtils.h"
25
26#define UE_API OPENGLDRV_API
27
28// Define here so don't have to do platform filtering
29#ifndef GL_TEXTURE_EXTERNAL_OES
30#define GL_TEXTURE_EXTERNAL_OES 0x8D65
31#endif
32
33#define FOpenGLCachedUniformBuffer_Invalid 0xFFFFFFFF
34
35template<class T> struct TOpenGLResourceTraits;
36
37#if (RHI_NEW_GPU_PROFILER == 0)
38
39// This class has multiple inheritance but really FGPUTiming is a static class
40class FOpenGLBufferedGPUTiming : public FGPUTiming
41{
42public:
43
51
52 void StartTiming();
53
58 void EndTiming();
59
67
68 void InitResources();
69 void ReleaseResources();
70
71
72private:
73
77 static void PlatformStaticInitialize(void* UserData);
78
80 const int32 BufferSize;
82 int32 CurrentTimestamp = -1;
84 int32 NumIssuedTimestamps = 0;
86 TArray<FOpenGLRenderQuery *> StartTimestamps;
88 TArray<FOpenGLRenderQuery *> EndTimestamps;
90 bool bIsTiming = false;
91};
92
99{
100public:
102 : DisjointQuery(new FOpenGLRenderQuery { FOpenGLRenderQuery::EType::Disjoint })
103 {}
104
105 void StartTracking();
106 void EndTracking();
107 bool IsResultValid();
108
110
112 {
113 return 1000000000ull;
114 }
115
116 static bool IsSupported()
117 {
118#if UE_BUILD_SHIPPING
119 return false;
120#else
122#endif
123 }
124
125 void Cleanup()
126 {
127 delete DisjointQuery;
128 DisjointQuery = nullptr;
129 }
130
131private:
132 bool bIsResultValid = false;
133 FOpenGLRenderQuery* DisjointQuery;
134};
135
137class FOpenGLEventNode : public FGPUProfilerEventNode
138{
139public:
140
141 FOpenGLEventNode(const TCHAR* InName, FGPUProfilerEventNode* InParent)
142 : FGPUProfilerEventNode(InName, InParent)
143 , Timing(1)
144 {
145 // Initialize Buffered timestamp queries
147 }
148
150 {
152 }
153
158 float GetTiming() override;
159
160 virtual void StartTiming() override
161 {
163 }
164
165 virtual void StopTiming() override
166 {
168 }
169
171};
172
174class FOpenGLEventNodeFrame : public FGPUProfilerEventNodeFrame
175{
176public:
183
188
190 void StartFrame() override;
191
193 void EndFrame() override;
194
196 virtual float GetRootTimingResults() override;
197
198 virtual void LogDisjointQuery() override;
199
202
205};
206
211struct FOpenGLGPUProfiler : public FGPUProfiler
212{
215
217 static const int MAX_GPUFRAMEQUERIES = 4;
220
221 // count the number of beginframe calls without matching endframe calls.
223
225
228
235
236 virtual FGPUProfilerEventNode* CreateEventNode(const TCHAR* InName, FGPUProfilerEventNode* InParent) override
237 {
239 return EventNode;
240 }
241
242 void Cleanup();
243
244 void BeginFrame();
245 void EndFrame();
246};
247
248#endif // (RHI_NEW_GPU_PROFILER == 0)
249
251
254{
255 static inline FOpenGLDynamicRHI* Singleton = nullptr;
256
257public:
258 static inline FOpenGLDynamicRHI& Get() { return *Singleton; }
259
260 friend class FOpenGLViewport;
261
264
267
268 // IOpenGLDynamicRHI interface.
269 UE_API virtual int32 RHIGetGLMajorVersion() const final override;
273#if PLATFORM_ANDROID
275#endif //PLATFORM_ANDROID
276
279 UE_API virtual GLuint RHIGetResource(FRHITexture* InTexture) const final override;
280 UE_API virtual bool RHIIsValidTexture(GLuint InTexture) const final override;
281 UE_API virtual void RHISetExternalGPUTime(uint64 InExternalGPUTime) final override;
282
283#if PLATFORM_ANDROID
284 UE_API virtual EGLDisplay RHIGetEGLDisplay() const final override;
294#endif
295
296 // FDynamicRHI interface.
297 UE_API virtual void Init() override;
298
299 UE_API virtual void Shutdown() override;
300 virtual const TCHAR* GetName() override { return TEXT("OpenGL"); }
301
302 template<typename TRHIType>
303 static auto* ResourceCast(TRHIType* Resource)
304 {
305 return static_cast<typename TOpenGLResourceTraits<TRHIType>::TConcreteType*>(Resource);
306 }
307
309 {
310 if (!TextureRHI)
311 {
312 return nullptr;
313 }
314 else
315 {
316 return static_cast<FOpenGLTexture*>(TextureRHI->GetTextureBaseRHI());
317 }
318 }
319
320 UE_API void BindUniformBuffer(EShaderFrequency ShaderFrequency, uint32 BufferIndex, FRHIUniformBuffer* BufferRHI);
321
324
329
334
335 // SRV / UAV creation functions
336 UE_API virtual FShaderResourceViewRHIRef RHICreateShaderResourceView (class FRHICommandListBase& RHICmdList, FRHIViewableResource* Resource, FRHIViewDesc const& ViewDesc) final override;
337 UE_API virtual FUnorderedAccessViewRHIRef RHICreateUnorderedAccessView(class FRHICommandListBase& RHICmdList, FRHIViewableResource* Resource, FRHIViewDesc const& ViewDesc) final override;
338
340 UE_API virtual void RHIUpdateUniformBuffer(FRHICommandListBase& RHICmdList, FRHIUniformBuffer* UniformBufferRHI, const void* Contents) final override;
341
342 [[nodiscard]] UE_API virtual FRHIBufferInitializer RHICreateBufferInitializer(FRHICommandListBase& RHICmdList, const FRHIBufferCreateDesc& CreateDesc) final override;
343
345 UE_API virtual void* LockBuffer_BottomOfPipe(FRHICommandListBase& RHICmdList, FRHIBuffer* Buffer, uint32 Offset, uint32 Size, EResourceLockMode LockMode) final override;
346 UE_API virtual void UnlockBuffer_BottomOfPipe(FRHICommandListBase& RHICmdList, FRHIBuffer* Buffer) final override;
347#if ENABLE_LOW_LEVEL_MEM_TRACKER || UE_MEMORY_TRACE_ENABLED
348 UE_API virtual void RHIUpdateAllocationTags(FRHICommandListBase& RHICmdList, FRHIBuffer* Buffer) final override;
349#endif
350 UE_API virtual FRHICalcTextureSizeResult RHICalcTexturePlatformSize(FRHITextureDesc const& Desc, uint32 FirstMipIndex) final override;
351 UE_API virtual void RHIGetTextureMemoryStats(FTextureMemoryStats& OutStats) final override;
352 UE_API virtual bool RHIGetTextureMemoryVisualizeData(FColor* TextureData,int32 SizeX,int32 SizeY,int32 Pitch,int32 PixelSize) final override;
353 [[nodiscard]] UE_API virtual FRHITextureInitializer RHICreateTextureInitializer(FRHICommandListBase& RHICmdList, const FRHITextureCreateDesc& CreateDesc) final override;
355 UE_API virtual void RHIGenerateMips(FRHITexture* Texture) final override;
356 UE_API virtual uint32 RHIComputeMemorySize(FRHITexture* TextureRHI) final override;
358
359 UE_API virtual FRHILockTextureResult RHILockTexture(FRHICommandListImmediate& RHICmdList, const FRHILockTextureArgs& Arguments) final override;
360 UE_API virtual void RHIUnlockTexture(FRHICommandListImmediate& RHICmdList, const FRHILockTextureArgs& Arguments) final override;
361
362 UE_API virtual void RHIUpdateTexture2D(FRHICommandListBase& RHICmdList, FRHITexture* Texture, uint32 MipIndex, const struct FUpdateTextureRegion2D& UpdateRegion, uint32 SourcePitch, const uint8* SourceData) final override;
363 UE_API virtual void RHIUpdateTexture3D(FRHICommandListBase& RHICmdList, FRHITexture* Texture, uint32 MipIndex, const struct FUpdateTextureRegion3D& UpdateRegion, uint32 SourceRowPitch, uint32 SourceDepthPitch, const uint8* SourceData) final override;
364 UE_API virtual void RHIBindDebugLabelName(FRHICommandListBase& RHICmdList, FRHITexture* Texture, const TCHAR* Name) final override;
367 UE_API virtual void RHIMapStagingSurface(FRHITexture* Texture, FRHIGPUFence* Fence, void*& OutData, int32& OutWidth, int32& OutHeight, uint32 GPUIndex = 0) final override;
380 UE_API virtual FViewportRHIRef RHICreateViewport(void* WindowHandle, uint32 SizeX, uint32 SizeY, bool bIsFullscreen, EPixelFormat PreferredPixelFormat) final override;
381 UE_API virtual void RHIResizeViewport(FRHIViewport* Viewport, uint32 SizeX, uint32 SizeY, bool bIsFullscreen) final override;
383 UE_API virtual void RHITick(float DeltaTime) final override;
386 UE_API virtual void RHIGetSupportedResolution(uint32& Width, uint32& Height) final override;
391 UE_API virtual void RHIFinalizeContext(FRHIFinalizeContextArgs&& Args, TRHIPipelineArray<IRHIPlatformCommandList*>& Output) final override;
392 UE_API virtual void RHISubmitCommandLists(FRHISubmitCommandListsArgs&& Args) final override;
393
394 UE_API virtual void RHIBeginRenderPass(const FRHIRenderPassInfo& InInfo, const TCHAR* InName) final override;
397
398 UE_API virtual void RHIBeginTransitions(TArrayView<const FRHITransition*> Transitions) override final;
399 UE_API virtual void RHIEndTransitions(TArrayView<const FRHITransition*> Transitions) override final;
400
402 UE_API virtual void RHIDispatchComputeShader(uint32 ThreadGroupCountX, uint32 ThreadGroupCountY, uint32 ThreadGroupCountZ) final override;
403 UE_API virtual void RHIDispatchIndirectComputeShader(FRHIBuffer* ArgumentBuffer, uint32 ArgumentOffset) final override;
405 UE_API virtual void RHIClearUAVFloat(FRHIUnorderedAccessView* UnorderedAccessViewRHI, const FVector4f& Values) final override;
406 UE_API virtual void RHIClearUAVUint(FRHIUnorderedAccessView* UnorderedAccessViewRHI, const FUintVector4& Values) final override;
407
412
413 UE_API virtual void RHIEndDrawingViewport(FRHIViewport* Viewport, bool bPresent, bool bLockToVsync) final override;
414 UE_API virtual void RHIEndFrame(const FRHIEndFrameArgs& Args) final override;
417 UE_API virtual void RHISetViewport(float MinX, float MinY, float MinZ, float MaxX, float MaxY, float MaxZ) final override;
418 UE_API virtual void RHISetScissorRect(bool bEnable, uint32 MinX, uint32 MinY, uint32 MaxX, uint32 MaxY) final override;
429 UE_API virtual void RHISetBlendState(FRHIBlendState* NewState, const FLinearColor& BlendFactor) final override;
430 virtual void RHISetBlendFactor(const FLinearColor& BlendFactor) final override
431 {
432 // Currently ignored as well as on RHISetBlendState()...
433 }
434
437
438 UE_API virtual void RHIDrawPrimitive(uint32 BaseVertexIndex, uint32 NumPrimitives, uint32 NumInstances) final override;
439 UE_API virtual void RHIDrawPrimitiveIndirect(FRHIBuffer* ArgumentBuffer, uint32 ArgumentOffset) final override;
440 UE_API virtual void RHIDrawIndexedIndirect(FRHIBuffer* IndexBufferRHI, FRHIBuffer* ArgumentsBufferRHI, int32 DrawArgumentsIndex, uint32 NumInstances) final override;
441 UE_API virtual void RHIDrawIndexedPrimitive(FRHIBuffer* IndexBuffer, int32 BaseVertexIndex, uint32 FirstInstance, uint32 NumVertices, uint32 StartIndex, uint32 NumPrimitives, uint32 NumInstances) final override;
442 UE_API virtual void RHIDrawIndexedPrimitiveIndirect(FRHIBuffer* IndexBuffer, FRHIBuffer* ArgumentBuffer, uint32 ArgumentOffset) final override;
443 UE_API virtual void RHIEnableDepthBoundsTest(bool bEnable) final override;
444 UE_API virtual void RHISetDepthBounds(float MinDepth, float MaxDepth) final override;
445#if WITH_RHI_BREADCRUMBS
446 UE_API virtual void RHIBeginBreadcrumbGPU(FRHIBreadcrumbNode* Breadcrumb) final override;
447 UE_API virtual void RHIEndBreadcrumbGPU (FRHIBreadcrumbNode* Breadcrumb) final override;
448#endif
450
451 // FIXME: Broken on Android for cubemaps
452 UE_API virtual void RHICopyTexture(FRHITexture* SourceTexture, FRHITexture* DestTexture, const FRHICopyTextureInfo& CopyInfo) final override;
453
454 UE_API virtual void RHICopyBufferRegion(FRHIBuffer* DestBuffer, uint64 DstOffset, FRHIBuffer* SourceBuffer, uint64 SrcOffset, uint64 NumBytes) final override;
455
456 // Inline copy
458 UE_API virtual void RHIWriteGPUFence_TopOfPipe(FRHICommandListBase& RHICmdList, FRHIGPUFence* FenceRHI) final override;
459 UE_API virtual void RHIWriteGPUFence(FRHIGPUFence* FenceRHI) final override;
460 UE_API virtual void* RHILockStagingBuffer(FRHIStagingBuffer* StagingBuffer, FRHIGPUFence* Fence, uint32 Offset, uint32 SizeRHI) final override;
461 UE_API virtual void RHIUnlockStagingBuffer(FRHIStagingBuffer* StagingBuffer) final override;
462 UE_API virtual void* LockStagingBuffer_RenderThread(class FRHICommandListImmediate& RHICmdList, FRHIStagingBuffer* StagingBuffer, FRHIGPUFence* Fence, uint32 Offset, uint32 SizeRHI) final override;
463 UE_API virtual void UnlockStagingBuffer_RenderThread(class FRHICommandListImmediate& RHICmdList, FRHIStagingBuffer* StagingBuffer) final override;
464 UE_API virtual void RHIMapStagingSurface_RenderThread(class FRHICommandListImmediate& RHICmdList, FRHITexture* Texture, uint32 GPUIndex, FRHIGPUFence* Fence, void*& OutData, int32& OutWidth, int32& OutHeight) final override;
465 UE_API virtual void RHIUnmapStagingSurface_RenderThread(class FRHICommandListImmediate& RHICmdList, FRHITexture* Texture, uint32 GPUIndex) final override;
466
469
471
472 // Compute the hash of the state components of the PSO initializer for PSO Precaching (only hash data relevant for the RHI specific PSO)
474
475 // Compute the hash of the PSO initializer for PSO Precaching (only hash data relevant for the RHI specific PSO)
477
478 // Check if PSO Initializers are the same used during PSO Precaching (only compare data relevant for the RHI specific PSO)
480
481 UE_API void Cleanup();
482
483 UE_API void PurgeFramebufferFromCaches(GLuint Framebuffer);
484 UE_API void OnBufferDeletion(GLenum Type, GLuint BufferResource);
488
490 FORCEINLINE void CachedSetupTextureStage(GLint TextureIndex, GLenum Target, GLuint Resource, GLint BaseMip, GLint NumMips)
491 {
492 FTextureStage& TextureState = ContextState.Textures[TextureIndex];
493 const bool bSameTarget = (TextureState.Target == Target);
494 const bool bSameResource = (TextureState.Resource == Resource);
495
497 {
498 // Nothing changed, no need to update
499 return;
500 }
501
502 CachedSetupTextureStageInner(TextureIndex, Target, Resource, BaseMip, NumMips);
503 }
504
505 UE_API void CachedSetupTextureStageInner(GLint TextureIndex, GLenum Target, GLuint Resource, GLint BaseMip, GLint NumMips);
506 UE_API void CachedSetupUAVStage(GLint UAVIndex, GLenum Format, GLuint Resource, bool bLayered, GLint Layer, GLenum Access, GLint Level);
508
510 {
511 check(FOpenGL::SupportsUniformBuffers());
512
514 if (ContextState.UniformBufferBound != Buffer)
515 {
517 ContextState.UniformBufferBound = Buffer;
518 }
519 }
520
522 {
524 switch (Type)
525 {
526 case GL_ARRAY_BUFFER:
527 if (ContextState.ArrayBufferBound != Buffer)
528 {
530 ContextState.ArrayBufferBound = Buffer;
531 }
532 break;
533
535 if (ContextState.ElementArrayBufferBound != Buffer)
536 {
538 ContextState.ElementArrayBufferBound = Buffer;
539 }
540 break;
541
543 if (ContextState.StorageBufferBound != Buffer)
544 {
546 ContextState.StorageBufferBound = Buffer;
547 }
548 break;
549
551 if (ContextState.PixelUnpackBufferBound != Buffer)
552 {
554 ContextState.PixelUnpackBufferBound = Buffer;
555 }
556 break;
557
558 default:
559 checkNoEntry();
560 break;
561 }
562 }
563
565
567
569
570#define RHITHREAD_GLTRACE 1
571#if RHITHREAD_GLTRACE
572 #define RHITHREAD_GLTRACE_BLOCKING QUICK_SCOPE_CYCLE_COUNTER(STAT_OGLRHIThread_Flush);
573//#define RHITHREAD_GLTRACE_BLOCKING FPlatformMisc::LowLevelOutputDebugStringf(TEXT("FLUSHING %s!\n"), ANSI_TO_TCHAR(__FUNCTION__))
574//#define RHITHREAD_GLTRACE_BLOCKING UE_LOG(LogRHI, Warning,TEXT("FLUSHING %s!\n"), ANSI_TO_TCHAR(__FUNCTION__));
575#else
576 #define RHITHREAD_GLTRACE_BLOCKING
577#endif
578
580 {
603
606
607 FORCEINLINE_DEBUGGABLE void Lock(void* RHIBuffer, void* Buffer, uint32 ArrayIndex, uint32 MipIndex, uint32 Stride, uint32 SizeRHI, EResourceLockMode LockMode)
608 {
609//#if DO_CHECK
610 for (auto& Parms : OutstandingLocks)
611 {
612 check(Parms.RHIBuffer != RHIBuffer || Parms.MipIndex != MipIndex || Parms.ArrayIndex != ArrayIndex);
613 }
614//#endif
615 OutstandingLocks.Add(FLockParams(RHIBuffer, Buffer, ArrayIndex, MipIndex, Stride, SizeRHI, LockMode));
616 }
617
618 FORCEINLINE_DEBUGGABLE FLockParams Unlock(void* RHIBuffer, uint32 ArrayIndex, uint32 MipIndex)
619 {
620 for (int32 Index = 0; Index < OutstandingLocks.Num(); Index++)
621 {
622 FLockParams& CurrentLock = OutstandingLocks[Index];
623 if (CurrentLock.RHIBuffer == RHIBuffer && CurrentLock.MipIndex == MipIndex && CurrentLock.ArrayIndex == ArrayIndex)
624 {
627 return Result;
628 }
629 }
630 check(!"Mismatched RHI buffer locks.");
631 return FLockParams(nullptr, nullptr, 0, 0, 0, 0, RLM_WriteOnly);
632 }
633 };
634
636
638
645
647
649 FRHIVertexDeclaration* VertexDeclarationRHI,
650 FRHIVertexShader* VertexShaderRHI,
651 FRHIPixelShader* PixelShaderRHI,
653 ) final override
654 {
655 checkNoEntry();
656 return nullptr;
657 }
658
660
661
662 UE_API virtual void RHIPostExternalCommandsReset() final override;
663
664 UE_API GLuint GetOpenGLFramebuffer(uint32 NumSimultaneousRenderTargets, FOpenGLTexture** RenderTargets, const uint32* ArrayIndices, const uint32* MipmapLevels, FOpenGLTexture* DepthStencilTarget);
665 UE_API GLuint GetOpenGLFramebuffer(uint32 NumSimultaneousRenderTargets, FOpenGLTexture** RenderTargets, const uint32* ArrayIndices, const uint32* MipmapLevels, FOpenGLTexture* DepthStencilTarget, FExclusiveDepthStencil DepthStencilAccess, int32 NumRenderingSamples);
666
667 UE_API void ResolveTexture(FOpenGLTexture* Texture, uint32 MipIndex, uint32 ArrayIndex);
668
669private:
670 UE_API FBoundShaderStateRHIRef RHICreateBoundShaderState_Internal(FRHIVertexDeclaration* VertexDeclaration, FRHIVertexShader* VertexShader, FRHIPixelShader* PixelShader, FRHIGeometryShader* GeometryShader, bool FromPSOFileCache);
671
672 UE_API void PrepareGFXBoundShaderState(const FGraphicsPipelineStateInitializer& Initializer);
673
675 UE_API void EndFrameTick();
676
678 FOpenGLRHIState PendingState;
679 FSamplerStateRHIRef PointSamplerState;
680
682 TArray<FOpenGLViewport*> Viewports;
683 bool bRevertToSharedContextAfterDrawingViewport = false;
684
685 EPrimitiveType PrimitiveType = PT_Num;
686
688 TGlobalResource< TBoundShaderStateHistory<10000> > BoundShaderStateHistory;
689
690 FOpenGLContextState ContextState;
691
693 void ApplyStaticUniformBuffers(TRHIShader* Shader);
694
695 TArray<FRHIUniformBuffer*> GlobalUniformBuffers;
696
698 TMap<GLuint, TPair<GLenum, GLenum>> TextureMipLimits;
699
701 struct FPlatformOpenGLDevice* PlatformDevice = nullptr;
702
703#if RHI_NEW_GPU_PROFILER
704
705 friend class FOpenGLRenderQuery;
706
707 FOpenGLProfiler Profiler;
708
709 void FlushProfilerStats()
710 {
711 // Flush accumulated draw stats
712 if (Profiler.bEnabled && StatEvent)
713 {
714 Profiler.EmplaceEvent<UE::RHI::GPUProfiler::FEvent::FStats>() = StatEvent;
715 StatEvent = {};
716 }
717 }
718
719#else
720
721 TOptional<FOpenGLGPUProfiler> GPUProfilingData;
722 friend FOpenGLGPUProfiler;
723
724 void RegisterGPUWork(uint32 NumPrimitives = 0, uint32 NumVertices = 0)
725 {
726 GPUProfilingData->RegisterGPUWork(NumPrimitives, NumVertices);
727 }
728 void RegisterGPUDispatch(FIntVector GroupCount)
729 {
730 GPUProfilingData->RegisterGPUDispatch(GroupCount);
731 }
732
733#endif
734
735 FCriticalSection CustomPresentSection;
737
738 UE_API void InitializeStateResources();
739
740 UE_API void SetupVertexArrays(uint32 BaseVertexIndex, FOpenGLStream* Streams, uint32 NumStreams, uint32 MaxVertices);
741
742 UE_API void SetupDraw(FOpenGLBuffer* IndexBuffer, uint32 BaseVertexIndex, uint32 MaxVertices);
743 UE_API void SetupDispatch();
744
746 UE_API void BindPendingFramebuffer();
747 UE_API void BindPendingShaderState();
748 UE_API void BindPendingComputeShaderState(FOpenGLComputeShader* ComputeShader);
749 UE_API void UpdateRasterizerStateInOpenGLContext();
750 UE_API void UpdateDepthStencilStateInOpenGLContext();
751 UE_API void UpdateScissorRectInOpenGLContext();
752 UE_API void UpdateViewportInOpenGLContext();
753
754 template <class ShaderType> void SetResourcesFromTables(ShaderType* Shader);
755 FORCEINLINE void CommitGraphicsResourceTables()
756 {
757 if (PendingState.bAnyDirtyGraphicsUniformBuffers)
758 {
759 CommitGraphicsResourceTablesInner();
760 }
761 }
762 UE_API void CommitGraphicsResourceTablesInner();
763 UE_API void CommitComputeResourceTables(FOpenGLComputeShader* ComputeShader);
764 UE_API void CommitNonComputeShaderConstants();
765 UE_API void CommitComputeShaderConstants(FOpenGLComputeShader* ComputeShader);
766 UE_API void SetPendingBlendStateForActiveRenderTargets();
767
768 template <typename StateType>
769 void SetupTexturesForDraw(const StateType& ShaderState, int32 MaxTexturesNeeded);
770 UE_API void SetupTexturesForDraw();
771
772 UE_API void SetupUAVsForDraw();
773 UE_API void SetupUAVsForCompute(const FOpenGLComputeShader* ComputeShader);
774 UE_API void SetupUAVsForProgram(const TBitArray<>& NeededBits, int32 MaxUAVUnitUsed);
775
776 UE_API void RHIClearMRT(const bool* bClearColorArray, int32 NumClearColors, const FLinearColor* ColorArray, bool bClearDepth, float Depth, bool bClearStencil, uint32 Stencil);
777
778public:
780 UE_API void InternalSetShaderTexture(FOpenGLTexture* Texture, FOpenGLShaderResourceView* SRV, GLint TextureIndex, GLenum Target, GLuint Resource, int NumMips, int LimitMip);
781 UE_API void InternalSetShaderImageUAV(GLint UAVIndex, GLenum Format, GLuint Resource, bool bLayered, GLint Layer, GLenum Access, GLint Level);
785
787
788private:
789
790 UE_API void ApplyTextureStage(GLint TextureIndex, const FTextureStage& TextureStage, FOpenGLSamplerState* SamplerState);
791
792 UE_API void ReadSurfaceDataRaw(FRHITexture* TextureRHI, FIntRect Rect, TArray<uint8>& OutData, FReadSurfaceDataFlags InFlags);
793
794 UE_API void BindUniformBufferBase(int32 NumUniformBuffers, FRHIUniformBuffer** BoundUniformBuffers, uint32* DynamicOffsets, uint32 FirstUniformBuffer, bool ForceUpdate);
795
796 UE_API void ClearCurrentFramebufferWithCurrentScissor(int8 ClearType, int32 NumClearColors, const bool* bClearColorArray, const FLinearColor* ClearColorArray, float Depth, uint32 Stencil);
797
798 FTextureLockTracker GLLockTracker;
799
800 class FOpenGLFenceKick
801 {
802 public:
803 FOpenGLFenceKick(FOpenGLDynamicRHI* RHI)
804 : RHI(*RHI)
805 {}
806 ~FOpenGLFenceKick();
807
808 void OnDrawCall();
809 void Reset();
810
811 private:
812 void InsertKick();
813
814 TArray<UGLsync> Syncs;
815 int32 DrawCounter = 0;
816 GLuint LastSeenFramebuffer = 0;
817
819 } KickHint { this };
820};
821
823
826{
827public:
828
829 // IModuleInterface
830 virtual bool SupportsDynamicReloading() override { return false; }
831
832 // IDynamicRHIModule
833 virtual bool IsSupported() override;
834
836};
837
839
840#undef UE_API
#define FORCEINLINE
Definition AndroidPlatform.h:140
#define check(expr)
Definition AssertionMacros.h:314
#define checkNoEntry()
Definition AssertionMacros.h:316
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define FORCEINLINE_DEBUGGABLE
Definition CoreMiscDefines.h:74
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
#define UE_API
Definition OpenGLDrv.h:26
ERHIFeatureLevel::Type GRequestedFeatureLevel
Definition OpenGLDrv.cpp:30
#define VERIFY_GL_SCOPE(...)
Definition OpenGLUtil.h:133
EPixelFormat
Definition PixelFormat.h:16
ERHIAccess
Definition RHIAccess.h:11
EShaderFrequency
Definition RHIDefinitions.h:202
EUniformBufferUsage
Definition RHIDefinitions.h:536
ECubeFace
Definition RHIDefinitions.h:525
EResourceLockMode
Definition RHIDefinitions.h:785
@ RLM_WriteOnly
Definition RHIDefinitions.h:787
uint8 FUniformBufferStaticSlot
Definition RHIDefinitions.h:722
EUniformBufferValidation
Definition RHIDefinitions.h:546
ETextureCreateFlags
Definition RHIDefinitions.h:1091
ERenderQueryType
Definition RHIDefinitions.h:258
EPrimitiveType
Definition RHIDefinitions.h:822
@ PT_Num
Definition RHIDefinitions.h:846
ERHIPipeline
Definition RHIPipeline.h:13
uint32 Offset
Definition VulkanMemory.cpp:4033
uint32 Size
Definition VulkanMemory.cpp:4034
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition RHI.h:403
Definition DynamicRHI.h:206
Definition RHIResources.h:409
Definition Float16Color.h:13
Definition RHIResources.h:4572
Definition NameTypes.h:617
Definition OpenGLDrv.h:41
void InitResources()
Definition OpenGLQuery.cpp:590
uint64 GetTiming(bool bGetCurrentResultsAndBlock=false)
Definition OpenGLQuery.cpp:675
void EndTiming()
Definition OpenGLQuery.cpp:655
void StartTiming()
Definition OpenGLQuery.cpp:637
void ReleaseResources()
Definition OpenGLQuery.cpp:615
Definition OpenGLShaderResources.h:262
Definition OpenGLDrv.h:99
FOpenGLDisjointTimeStampQuery()
Definition OpenGLDrv.h:101
bool GetResult(uint64 *OutResult)
Definition OpenGLQuery.cpp:786
void Cleanup()
Definition OpenGLDrv.h:125
void StartTracking()
Definition OpenGLQuery.cpp:761
static uint64 GetTimingFrequency()
Definition OpenGLDrv.h:111
static bool IsSupported()
Definition OpenGLDrv.h:116
bool IsResultValid()
Definition OpenGLQuery.cpp:780
void EndTracking()
Definition OpenGLQuery.cpp:770
Definition OpenGLDrv.h:826
virtual bool SupportsDynamicReloading() override
Definition OpenGLDrv.h:830
virtual FDynamicRHI * CreateRHI(ERHIFeatureLevel::Type RequestedFeatureLevel=ERHIFeatureLevel::Num) override
Definition OpenGLDevice.cpp:1154
virtual bool IsSupported() override
Definition OpenGLDevice.cpp:1457
Definition OpenGLDrv.h:254
virtual UE_API FRHITextureInitializer RHICreateTextureInitializer(FRHICommandListBase &RHICmdList, const FRHITextureCreateDesc &CreateDesc) final override
Definition OpenGLTexture.cpp:1485
virtual UE_API void RHIEndRenderQuery(FRHIRenderQuery *RenderQuery) final override
Definition OpenGLQuery.cpp:464
virtual UE_API int32 RHIGetGLMinorVersion() const final override
Definition OpenGLDrv.cpp:38
virtual UE_API void RHIResizeViewport(FRHIViewport *Viewport, uint32 SizeX, uint32 SizeY, bool bIsFullscreen) final override
Definition OpenGLViewport.cpp:91
virtual UE_API void RHIBindDebugLabelName(FRHICommandListBase &RHICmdList, FRHITexture *Texture, const TCHAR *Name) final override
Definition OpenGLTexture.cpp:1835
virtual UE_API FStagingBufferRHIRef RHICreateStagingBuffer() final override
Definition OpenGLBuffer.cpp:308
UE_API void OnProgramDeletion(GLint ProgramResource)
Definition OpenGLCommands.cpp:2001
virtual UE_API FTextureRHIRef RHIAsyncCreateTexture2D(uint32 SizeX, uint32 SizeY, uint8 Format, uint32 NumMips, ETextureCreateFlags Flags, ERHIAccess InResourceState, void **InitialMipData, uint32 NumInitialMips, const TCHAR *DebugName, FGraphEventRef &OutCompletionEvent) final override
Definition OpenGLTexture.cpp:1527
virtual UE_API FGeometryShaderRHIRef RHICreateGeometryShader(TArrayView< const uint8 > Code, const FSHAHash &Hash) final override
Definition OpenGLShaders.cpp:1125
virtual UE_API uint64 RHIGetMinimumAlignmentForBufferBackedSRV(EPixelFormat Format) final override
Definition OpenGLDevice.cpp:1451
virtual UE_API void RHISetViewport(float MinX, float MinY, float MinZ, float MaxX, float MaxY, float MaxZ) final override
Definition OpenGLCommands.cpp:309
virtual UE_API FTextureRHIRef AsyncReallocateTexture2D_RenderThread(class FRHICommandListImmediate &RHICmdList, FRHITexture *Texture2D, int32 NewMipCount, int32 NewSizeX, int32 NewSizeY, FThreadSafeCounter *RequestStatus) final override
Definition OpenGLTexture.cpp:1567
virtual UE_API void RHISetStreamSource(uint32 StreamIndex, FRHIBuffer *VertexBuffer, uint32 Offset) final override
Definition OpenGLCommands.cpp:193
static FOpenGLTexture * ResourceCast(FRHITexture *TextureRHI)
Definition OpenGLDrv.h:308
virtual UE_API void RHISetComputeShader(FRHIComputeShader *ComputeShader) final override
Definition OpenGLCommands.cpp:2691
virtual UE_API void RHIAcquireThreadOwnership() final override
Definition OpenGLDevice.cpp:1423
UE_API void SetRenderTargetsAndClear(const FRHISetRenderTargetsInfo &RenderTargetsInfo)
Definition OpenGLCommands.cpp:1746
virtual UE_API bool RHIGetAvailableResolutions(FScreenResolutionArray &Resolutions, bool bIgnoreRefreshRate) final override
Definition OpenGLViewport.cpp:54
virtual UE_API void RHIBeginRenderQuery(FRHIRenderQuery *RenderQuery) final override
Definition OpenGLQuery.cpp:459
virtual UE_API IRHIComputeContext * RHIGetCommandContext(ERHIPipeline Pipeline, FRHIGPUMask GPUMask) final override
Definition OpenGLCommands.cpp:2793
virtual UE_API FTextureRHIRef RHIAsyncReallocateTexture2D(FRHITexture *Texture2D, int32 NewMipCount, int32 NewSizeX, int32 NewSizeY, FThreadSafeCounter *RequestStatus) final override
Definition OpenGLTexture.cpp:1572
virtual UE_API FViewportRHIRef RHICreateViewport(void *WindowHandle, uint32 SizeX, uint32 SizeY, bool bIsFullscreen, EPixelFormat PreferredPixelFormat) final override
Definition OpenGLViewport.cpp:81
virtual UE_API void RHIDrawIndexedPrimitiveIndirect(FRHIBuffer *IndexBuffer, FRHIBuffer *ArgumentBuffer, uint32 ArgumentOffset) final override
Definition OpenGLCommands.cpp:2369
UE_API void InitializeGLTexture(FOpenGLTexture *Texture, const void *BulkDataPtr, uint64 BulkDataSize)
Definition OpenGLTexture.cpp:515
virtual UE_API FUnorderedAccessViewRHIRef RHICreateUnorderedAccessView(class FRHICommandListBase &RHICmdList, FRHIViewableResource *Resource, FRHIViewDesc const &ViewDesc) final override
Definition OpenGLUAV.cpp:375
virtual UE_API bool RHISupportsFramebufferSRGBEnable() const final override
Definition OpenGLDrv.cpp:43
virtual UE_API void RHIDrawPrimitive(uint32 BaseVertexIndex, uint32 NumPrimitives, uint32 NumInstances) final override
Definition OpenGLCommands.cpp:2215
virtual UE_API void RHINextSubpass() final override
Definition OpenGLRenderTarget.cpp:1128
virtual UE_API FRHICalcTextureSizeResult RHICalcTexturePlatformSize(FRHITextureDesc const &Desc, uint32 FirstMipIndex) final override
Definition OpenGLTexture.cpp:135
virtual UE_API FTextureRHIRef RHICreateTexture2DArrayFromResource(EPixelFormat Format, uint32 SizeX, uint32 SizeY, uint32 ArraySize, uint32 NumMips, uint32 NumSamples, uint32 NumSamplesTileMem, const FClearValueBinding &ClearValueBinding, GLuint Resource, ETextureCreateFlags Flags) final override
Definition OpenGLTexture.cpp:1978
UE_API void ResolveTexture(FOpenGLTexture *Texture, uint32 MipIndex, uint32 ArrayIndex)
Definition OpenGLTexture.cpp:825
virtual UE_API void RHIReadSurfaceFloatData(FRHITexture *Texture, FIntRect Rect, TArray< FFloat16Color > &OutData, ECubeFace CubeFace, int32 ArrayIndex, int32 MipIndex) final override
Definition OpenGLRenderTarget.cpp:856
virtual UE_API void RHIEndRenderPass() final override
Definition OpenGLRenderTarget.cpp:1081
virtual UE_API void RHISubmitCommandLists(FRHISubmitCommandListsArgs &&Args) final override
Definition OpenGLCommands.cpp:2816
virtual UE_API void RHIDispatchComputeShader(uint32 ThreadGroupCountX, uint32 ThreadGroupCountY, uint32 ThreadGroupCountZ) final override
Definition OpenGLCommands.cpp:2716
virtual UE_API bool RHIMatchPrecachePSOInitializers(const FGraphicsPipelineStateInitializer &LHS, const FGraphicsPipelineStateInitializer &RHS) final override
Definition OpenGLDrv.cpp:228
virtual UE_API void RHISetDepthStencilState(FRHIDepthStencilState *NewState, uint32 StencilRef) final override
Definition OpenGLCommands.cpp:1243
virtual UE_API FTextureRHIRef RHICreateTextureCubeFromResource(EPixelFormat Format, uint32 Size, bool bArray, uint32 ArraySize, uint32 NumMips, uint32 NumSamples, uint32 NumSamplesTileMem, const FClearValueBinding &ClearValueBinding, GLuint Resource, ETextureCreateFlags Flags) final override
Definition OpenGLTexture.cpp:1991
virtual UE_API FSamplerStateRHIRef RHICreateSamplerState(const FSamplerStateInitializerRHI &Initializer) final override
Definition OpenGLState.cpp:230
virtual UE_API bool RHIGetRenderQueryResult(FRHIRenderQuery *RenderQuery, uint64 &OutResult, bool bWait, uint32 GPUIndex=INDEX_NONE) final override
Definition OpenGLQuery.cpp:470
virtual UE_API void RHIMapStagingSurface(FRHITexture *Texture, FRHIGPUFence *Fence, void *&OutData, int32 &OutWidth, int32 &OutHeight, uint32 GPUIndex=0) final override
Definition OpenGLRenderTarget.cpp:844
UE_API void ClearCachedAttributeState(int32 PositionAttrib, int32 TexCoordsAttrib)
Definition OpenGLDevice.cpp:124
virtual UE_API class IRHICommandContext * RHIGetDefaultContext() final override
Definition OpenGLCommands.cpp:2788
virtual UE_API void RHIBeginRenderPass(const FRHIRenderPassInfo &InInfo, const TCHAR *InName) final override
Definition OpenGLRenderTarget.cpp:1051
static auto * ResourceCast(TRHIType *Resource)
Definition OpenGLDrv.h:303
virtual UE_API void RHIEndDrawingViewport(FRHIViewport *Viewport, bool bPresent, bool bLockToVsync) final override
Definition OpenGLViewport.cpp:112
virtual UE_API EPixelFormat RHIPreferredPixelFormatHint(EPixelFormat PreferredPixelFormat) final override
Definition OpenGLViewport.cpp:99
virtual const TCHAR * GetName() override
Definition OpenGLDrv.h:300
virtual UE_API void Shutdown() override
Definition OpenGLDevice.cpp:1361
UE_API void CachedSetupUAVStage(GLint UAVIndex, GLenum Format, GLuint Resource, bool bLayered, GLint Layer, GLenum Access, GLint Level)
Definition OpenGLCommands.cpp:750
virtual UE_API void RHISetShaderParameters(FRHIGraphicsShader *Shader, TConstArrayView< uint8 > InParametersData, TConstArrayView< FRHIShaderParameter > InParameters, TConstArrayView< FRHIShaderParameterResource > InResourceParameters, TConstArrayView< FRHIShaderParameterResource > InBindlessParameters) final override
Definition OpenGLCommands.cpp:1176
UE_API void SetRenderTargets(uint32 NumSimultaneousRenderTargets, const FRHIRenderTargetView *NewRenderTargets, const FRHIDepthRenderTargetView *NewDepthStencilTarget)
Definition OpenGLCommands.cpp:1626
virtual UE_API FUniformBufferRHIRef RHICreateUniformBuffer(const void *Contents, const FRHIUniformBufferLayout *Layout, EUniformBufferUsage Usage, EUniformBufferValidation Validation) final override
Definition OpenGLUniformBuffer.cpp:668
virtual UE_API void RHISetShaderUnbinds(FRHIComputeShader *Shader, TConstArrayView< FRHIShaderParameterUnbind > InUnbinds) final override
Definition OpenGLCommands.cpp:1225
virtual UE_API void RHIEnableDepthBoundsTest(bool bEnable) final override
Definition OpenGLCommands.cpp:2765
UE_API void SetCustomPresent(class FRHICustomPresent *InCustomPresent)
Definition OpenGLDevice.cpp:1445
virtual UE_API void RHIWriteGPUFence_TopOfPipe(FRHICommandListBase &RHICmdList, FRHIGPUFence *FenceRHI) final override
Definition OpenGLQuery.cpp:910
UE_API void UpdateSRV(FOpenGLShaderResourceView *SRV)
Definition OpenGLCommands.cpp:845
virtual UE_API void * RHIGetNativeInstance() final override
Definition OpenGLDevice.cpp:1440
virtual UE_API void RHIClearUAVFloat(FRHIUnorderedAccessView *UnorderedAccessViewRHI, const FVector4f &Values) final override
Definition OpenGLUAV.cpp:273
virtual UE_API void RHIReadSurfaceData(FRHITexture *Texture, FIntRect Rect, TArray< FColor > &OutData, FReadSurfaceDataFlags InFlags) final override
Definition OpenGLRenderTarget.cpp:737
virtual UE_API void RHIDrawIndexedIndirect(FRHIBuffer *IndexBufferRHI, FRHIBuffer *ArgumentsBufferRHI, int32 DrawArgumentsIndex, uint32 NumInstances) final override
Definition OpenGLCommands.cpp:2286
virtual UE_API void RHITick(float DeltaTime) final override
Definition OpenGLViewport.cpp:104
virtual UE_API void RHICopyTexture(FRHITexture *SourceTexture, FRHITexture *DestTexture, const FRHICopyTextureInfo &CopyInfo) final override
Definition OpenGLTexture.cpp:1849
virtual UE_API GLuint RHIGetResource(FRHITexture *InTexture) const final override
Definition OpenGLDrv.cpp:48
UE_API void InitializeGLTextureInternal(FOpenGLTexture *Texture, void const *BulkDataPtr, uint64 BulkDataSize)
Definition OpenGLTexture.cpp:576
virtual UE_API void RHIUnlockTexture(FRHICommandListImmediate &RHICmdList, const FRHILockTextureArgs &Arguments) final override
Definition OpenGLTexture.cpp:2057
virtual UE_API bool RHIGetTextureMemoryVisualizeData(FColor *TextureData, int32 SizeX, int32 SizeY, int32 Pitch, int32 PixelSize) final override
Definition OpenGLTexture.cpp:170
virtual UE_API void RHIMapStagingSurface_RenderThread(class FRHICommandListImmediate &RHICmdList, FRHITexture *Texture, uint32 GPUIndex, FRHIGPUFence *Fence, void *&OutData, int32 &OutWidth, int32 &OutHeight) final override
Definition OpenGLRenderTarget.cpp:810
virtual UE_API FRHILockTextureResult RHILockTexture(FRHICommandListImmediate &RHICmdList, const FRHILockTextureArgs &Arguments) final override
Definition OpenGLTexture.cpp:2025
UE_API void OnBufferDeletion(GLenum Type, GLuint BufferResource)
Definition OpenGLCommands.cpp:2010
UE_API void LinkComputeProgram(FRHIComputeShader *ComputeShaderRHI)
Definition OpenGLShaders.cpp:2565
virtual UE_API void RHISetStencilRef(uint32 StencilRef) final override
Definition OpenGLCommands.cpp:1251
FORCEINLINE void CachedSetupTextureStage(GLint TextureIndex, GLenum Target, GLuint Resource, GLint BaseMip, GLint NumMips)
Definition OpenGLDrv.h:490
virtual UE_API void RHIBeginTransitions(TArrayView< const FRHITransition * > Transitions) override final
Definition OpenGLRenderTarget.cpp:1142
virtual UE_API void RHIBlockUntilGPUIdle() final override
Definition OpenGLCommands.cpp:2620
virtual UE_API void RHIGenerateMips(FRHITexture *Texture) final override
Definition OpenGLTexture.cpp:1534
virtual UE_API void RHIDrawPrimitiveIndirect(FRHIBuffer *ArgumentBuffer, uint32 ArgumentOffset) final override
Definition OpenGLCommands.cpp:2251
void DiscardRenderTargets(bool Depth, bool Stencil, uint32 ColorBitMask)
Definition OpenGLCommands.cpp:1696
virtual UE_API void RHIDrawIndexedPrimitive(FRHIBuffer *IndexBuffer, int32 BaseVertexIndex, uint32 FirstInstance, uint32 NumVertices, uint32 StartIndex, uint32 NumPrimitives, uint32 NumInstances) final override
Definition OpenGLCommands.cpp:2324
virtual UE_API void RHISetStaticUniformBuffer(FUniformBufferStaticSlot Slot, FRHIUniformBuffer *Buffer) final override
Definition OpenGLCommands.cpp:910
~FOpenGLDynamicRHI()
Definition OpenGLDrv.h:266
UE_API void BindUniformBuffer(EShaderFrequency ShaderFrequency, uint32 BufferIndex, FRHIUniformBuffer *BufferRHI)
Definition OpenGLCommands.cpp:962
virtual UE_API void RHIAliasTextureResources(FTextureRHIRef &DestTextureRHI, FTextureRHIRef &SrcTextureRHI) final override
Definition OpenGLTexture.cpp:2007
virtual UE_API FTextureRHIRef RHIGetViewportBackBuffer(FRHIViewport *Viewport) final override
Definition OpenGLViewport.cpp:175
virtual UE_API void RHIFlushResources() final override
Definition OpenGLDevice.cpp:1418
UE_API void InternalSetShaderBufferUAV(GLint UAVIndex, GLuint Resource)
Definition OpenGLCommands.cpp:663
virtual UE_API uint64 RHIComputePrecachePSOHash(const FGraphicsPipelineStateInitializer &Initializer) final override
Definition OpenGLDrv.cpp:217
virtual UE_API void RHIDispatchIndirectComputeShader(FRHIBuffer *ArgumentBuffer, uint32 ArgumentOffset) final override
Definition OpenGLCommands.cpp:2738
virtual UE_API FComputeShaderRHIRef RHICreateComputeShader(TArrayView< const uint8 > Code, const FSHAHash &Hash) final override
Definition OpenGLShaders.cpp:2603
virtual UE_API void RHISetExternalGPUTime(uint64 InExternalGPUTime) final override
Definition OpenGLDrv.cpp:59
UE_API void InternalSetShaderImageUAV(GLint UAVIndex, GLenum Format, GLuint Resource, bool bLayered, GLint Layer, GLenum Access, GLint Level)
Definition OpenGLCommands.cpp:652
virtual UE_API FPixelShaderRHIRef RHICreatePixelShader(TArrayView< const uint8 > Code, const FSHAHash &Hash) final override
Definition OpenGLShaders.cpp:1120
virtual UE_API void UnlockStagingBuffer_RenderThread(class FRHICommandListImmediate &RHICmdList, FRHIStagingBuffer *StagingBuffer) final override
Definition OpenGLBuffer.cpp:402
UE_API void CachedSetupTextureStageInner(GLint TextureIndex, GLenum Target, GLuint Resource, GLint BaseMip, GLint NumMips)
Definition OpenGLCommands.cpp:389
virtual UE_API void RHIEndRenderQuery_TopOfPipe(FRHICommandListBase &RHICmdList, FRHIRenderQuery *RenderQuery) override final
Definition OpenGLQuery.cpp:450
virtual UE_API void RHIUpdateTexture3D(FRHICommandListBase &RHICmdList, FRHITexture *Texture, uint32 MipIndex, const struct FUpdateTextureRegion3D &UpdateRegion, uint32 SourceRowPitch, uint32 SourceDepthPitch, const uint8 *SourceData) final override
Definition OpenGLTexture.cpp:1714
virtual UE_API void RHIReleaseThreadOwnership() final override
Definition OpenGLDevice.cpp:1429
UE_API void InternalSetSamplerStates(GLint TextureIndex, FOpenGLSamplerState *SamplerState)
Definition OpenGLCommands.cpp:384
virtual UE_API void RHICopyBufferRegion(FRHIBuffer *DestBuffer, uint64 DstOffset, FRHIBuffer *SourceBuffer, uint64 SrcOffset, uint64 NumBytes) final override
Definition OpenGLBuffer.cpp:295
virtual UE_API FBlendStateRHIRef RHICreateBlendState(const FBlendStateInitializerRHI &Initializer) final override
Definition OpenGLState.cpp:403
virtual UE_API bool RHIIsValidTexture(GLuint InTexture) const final override
Definition OpenGLDrv.cpp:54
virtual UE_API void RHISetMultipleViewports(uint32 Count, const FViewportBounds *Data) final override
Definition OpenGLCommands.cpp:2760
virtual UE_API void RHIGetSupportedResolution(uint32 &Width, uint32 &Height) final override
Definition OpenGLViewport.cpp:49
virtual FGraphicsPipelineStateRHIRef RHICreateGraphicsPipelineState(const FGraphicsPipelineStateInitializer &Initializer) override
Definition OpenGLDrv.h:639
UE_API void PurgeFramebufferFromCaches(GLuint Framebuffer)
Definition OpenGLRenderTarget.cpp:420
virtual UE_API void RHISetUniformBufferDynamicOffset(FUniformBufferStaticSlot Slot, uint32 Offset) final override
Definition OpenGLCommands.cpp:915
virtual FBoundShaderStateRHIRef RHICreateBoundShaderState(FRHIVertexDeclaration *VertexDeclarationRHI, FRHIVertexShader *VertexShaderRHI, FRHIPixelShader *PixelShaderRHI, FRHIGeometryShader *GeometryShaderRHI) final override
Definition OpenGLDrv.h:648
virtual UE_API void RHIWriteGPUFence(FRHIGPUFence *FenceRHI) final override
Definition OpenGLQuery.cpp:915
virtual UE_API void RHISetScissorRect(bool bEnable, uint32 MinX, uint32 MinY, uint32 MaxX, uint32 MaxY) final override
Definition OpenGLCommands.cpp:322
virtual UE_API void RHIClearUAVUint(FRHIUnorderedAccessView *UnorderedAccessViewRHI, const FUintVector4 &Values) final override
Definition OpenGLUAV.cpp:322
virtual UE_API uint64 RHIComputeStatePrecachePSOHash(const FGraphicsPipelineStateInitializer &Initializer) final override
Definition OpenGLDrv.cpp:188
virtual UE_API FVertexShaderRHIRef RHICreateVertexShader(TArrayView< const uint8 > Code, const FSHAHash &Hash) final override
Definition OpenGLShaders.cpp:1115
UE_API void InvalidateTextureResourceInCache(GLuint Resource)
Definition OpenGLTexture.cpp:1785
UE_API FOpenGLDynamicRHI()
Definition OpenGLDevice.cpp:1161
UE_API void SetShaderParametersCommon(EShaderFrequency ShaderFrequency, TConstArrayView< uint8 > InParametersData, TConstArrayView< FRHIShaderParameter > InParameters, TConstArrayView< FRHIShaderParameterResource > InResourceParameters)
Definition OpenGLCommands.cpp:1130
virtual UE_API void RHIUpdateUniformBuffer(FRHICommandListBase &RHICmdList, FRHIUniformBuffer *UniformBufferRHI, const void *Contents) final override
Definition OpenGLUniformBuffer.cpp:805
UE_API GLuint GetOpenGLFramebuffer(uint32 NumSimultaneousRenderTargets, FOpenGLTexture **RenderTargets, const uint32 *ArrayIndices, const uint32 *MipmapLevels, FOpenGLTexture *DepthStencilTarget)
Definition OpenGLRenderTarget.cpp:135
virtual void RHISetBlendFactor(const FLinearColor &BlendFactor) final override
Definition OpenGLDrv.h:430
UE_API void Cleanup()
Definition OpenGLDevice.cpp:1378
virtual UE_API void RHIFinalizeContext(FRHIFinalizeContextArgs &&Args, TRHIPipelineArray< IRHIPlatformCommandList * > &Output) final override
Definition OpenGLCommands.cpp:2799
static FOpenGLDynamicRHI & Get()
Definition OpenGLDrv.h:258
virtual UE_API FDepthStencilStateRHIRef RHICreateDepthStencilState(const FDepthStencilStateInitializerRHI &Initializer) final override
Definition OpenGLState.cpp:362
FOpenGLSamplerState * GetPointSamplerState() const
Definition OpenGLDrv.h:564
virtual UE_API void RHIUnmapStagingSurface(FRHITexture *Texture, uint32 GPUIndex=0) final override
Definition OpenGLRenderTarget.cpp:850
virtual UE_API void RHISetRasterizerState(FRHIRasterizerState *NewState) final override
Definition OpenGLCommands.cpp:203
virtual UE_API void RHIUpdateTexture2D(FRHICommandListBase &RHICmdList, FRHITexture *Texture, uint32 MipIndex, const struct FUpdateTextureRegion2D &UpdateRegion, uint32 SourcePitch, const uint8 *SourceData) final override
Definition OpenGLTexture.cpp:1616
virtual UE_API void RHIUnmapStagingSurface_RenderThread(class FRHICommandListImmediate &RHICmdList, FRHITexture *Texture, uint32 GPUIndex) final override
Definition OpenGLRenderTarget.cpp:833
virtual UE_API void RHIGetTextureMemoryStats(FTextureMemoryStats &OutStats) final override
Definition OpenGLTexture.cpp:148
virtual UE_API void RHIPostExternalCommandsReset() final override
Definition OpenGLCommands.cpp:2860
void CachedBindBuffer(GLenum Type, GLuint Buffer)
Definition OpenGLDrv.h:521
virtual UE_API void * RHIGetNativeDevice() final override
Definition OpenGLDevice.cpp:1435
virtual UE_API void RHIAdvanceFrameForGetViewportBackBuffer(FRHIViewport *Viewport, bool bPresent) final override
Definition OpenGLViewport.cpp:181
virtual UE_API void RHISetBoundShaderState(FRHIBoundShaderState *BoundShaderState) final override
Definition OpenGLCommands.cpp:361
virtual UE_API FRHIBufferInitializer RHICreateBufferInitializer(FRHICommandListBase &RHICmdList, const FRHIBufferCreateDesc &CreateDesc) final override
Definition OpenGLBuffer.cpp:213
virtual UE_API FGPUFenceRHIRef RHICreateGPUFence(const FName &Name) final override
Definition OpenGLQuery.cpp:920
virtual UE_API void RHIReplaceResources(FRHICommandListBase &RHICmdList, TArray< FRHIResourceReplaceInfo > &&ReplaceInfos) final override
Definition OpenGLDrv.cpp:805
virtual UE_API FRenderQueryRHIRef RHICreateRenderQuery(ERenderQueryType QueryType) final override
Definition OpenGLQuery.cpp:431
virtual UE_API void RHISetGraphicsPipelineState(FRHIGraphicsPipelineState *GraphicsState, uint32 StencilRef, bool bApplyAdditionalState) final override
Definition OpenGLCommands.cpp:2649
virtual UE_API void RHIBeginRenderQuery_TopOfPipe(FRHICommandListBase &RHICmdList, FRHIRenderQuery *RenderQuery) override final
Definition OpenGLQuery.cpp:442
UE_API void InternalSetShaderTexture(FOpenGLTexture *Texture, FOpenGLShaderResourceView *SRV, GLint TextureIndex, GLenum Target, GLuint Resource, int NumMips, int LimitMip)
Definition OpenGLCommands.cpp:372
virtual UE_API void RHISetDepthBounds(float MinDepth, float MaxDepth) final override
Definition OpenGLCommands.cpp:2780
virtual UE_API uint32 RHIComputeMemorySize(FRHITexture *TextureRHI) final override
Definition OpenGLTexture.cpp:1556
virtual UE_API void RHICopyToStagingBuffer(FRHIBuffer *SourceBufferRHI, FRHIStagingBuffer *DestinationStagingBufferRHI, uint32 InOffset, uint32 InNumBytes) final override
Definition OpenGLCommands.cpp:2823
virtual UE_API FShaderResourceViewRHIRef RHICreateShaderResourceView(class FRHICommandListBase &RHICmdList, FRHIViewableResource *Resource, FRHIViewDesc const &ViewDesc) final override
Definition OpenGLUAV.cpp:370
virtual UE_API int32 RHIGetGLMajorVersion() const final override
Definition OpenGLDrv.cpp:33
virtual UE_API void RHIRead3DSurfaceFloatData(FRHITexture *Texture, FIntRect Rect, FIntPoint ZMinMax, TArray< FFloat16Color > &OutData) final override
Definition OpenGLRenderTarget.cpp:933
virtual UE_API FTextureRHIRef RHICreateTexture2DFromResource(EPixelFormat Format, uint32 SizeX, uint32 SizeY, uint32 NumMips, uint32 NumSamples, uint32 NumSamplesTileMem, const FClearValueBinding &ClearValueBinding, GLuint Resource, ETextureCreateFlags Flags) final override
Definition OpenGLTexture.cpp:1940
UE_API void SetShaderUnbindsCommon(EShaderFrequency ShaderFrequency, TConstArrayView< FRHIShaderParameterUnbind > InUnbinds)
Definition OpenGLCommands.cpp:1204
virtual UE_API void RHIUnlockStagingBuffer(FRHIStagingBuffer *StagingBuffer) final override
Definition OpenGLBuffer.cpp:382
virtual UE_API FTextureRHIRef RHICreateAliasedTexture(FTextureRHIRef &SourceTexture) final override
Definition OpenGLTexture.cpp:2019
virtual UE_API FRasterizerStateRHIRef RHICreateRasterizerState(const FRasterizerStateInitializerRHI &Initializer) final override
Definition OpenGLState.cpp:339
virtual UE_API void RHIEndTransitions(TArrayView< const FRHITransition * > Transitions) override final
Definition OpenGLRenderTarget.cpp:1146
virtual UE_API void * LockStagingBuffer_RenderThread(class FRHICommandListImmediate &RHICmdList, FRHIStagingBuffer *StagingBuffer, FRHIGPUFence *Fence, uint32 Offset, uint32 SizeRHI) final override
Definition OpenGLBuffer.cpp:388
virtual UE_API void RHISetStaticUniformBuffers(const FUniformBufferStaticBindings &InUniformBuffers) final override
Definition OpenGLCommands.cpp:900
UE_API void InvalidateUAVResourceInCache(GLuint Resource)
Definition OpenGLTexture.cpp:1810
virtual UE_API void Init() override
Definition OpenGLDevice.cpp:1299
virtual UE_API void RHIEndFrame(const FRHIEndFrameArgs &Args) final override
Definition OpenGLDevice.cpp:93
virtual UE_API void UnlockBuffer_BottomOfPipe(FRHICommandListBase &RHICmdList, FRHIBuffer *Buffer) final override
Definition OpenGLBuffer.cpp:285
void CachedBindUniformBuffer(GLuint Buffer)
Definition OpenGLDrv.h:509
virtual UE_API void * LockBuffer_BottomOfPipe(FRHICommandListBase &RHICmdList, FRHIBuffer *Buffer, uint32 Offset, uint32 Size, EResourceLockMode LockMode) final override
Definition OpenGLBuffer.cpp:265
virtual UE_API void * RHILockStagingBuffer(FRHIStagingBuffer *StagingBuffer, FRHIGPUFence *Fence, uint32 Offset, uint32 SizeRHI) final override
Definition OpenGLBuffer.cpp:376
virtual UE_API void RHISetBlendState(FRHIBlendState *NewState, const FLinearColor &BlendFactor) final override
Definition OpenGLCommands.cpp:1619
virtual UE_API FVertexDeclarationRHIRef RHICreateVertexDeclaration(const FVertexDeclarationElementList &Elements) final override
Definition OpenGLVertexDeclaration.cpp:156
Definition OpenGLDrv.h:175
~FOpenGLEventNodeFrame()
Definition OpenGLDrv.h:184
void EndFrame() override
Definition OpenGLDrv.cpp:499
FOpenGLEventNodeFrame()
Definition OpenGLDrv.h:177
void StartFrame() override
Definition OpenGLDrv.cpp:491
FOpenGLDisjointTimeStampQuery DisjointQuery
Definition OpenGLDrv.h:204
virtual float GetRootTimingResults() override
Definition OpenGLDrv.cpp:506
virtual void LogDisjointQuery() override
Definition OpenGLDrv.cpp:520
FOpenGLBufferedGPUTiming RootEventTiming
Definition OpenGLDrv.h:201
Definition OpenGLDrv.h:138
FOpenGLBufferedGPUTiming Timing
Definition OpenGLDrv.h:170
virtual ~FOpenGLEventNode()
Definition OpenGLDrv.h:149
virtual void StartTiming() override
Definition OpenGLDrv.h:160
FOpenGLEventNode(const TCHAR *InName, FGPUProfilerEventNode *InParent)
Definition OpenGLDrv.h:141
float GetTiming() override
Definition OpenGLDrv.cpp:536
virtual void StopTiming() override
Definition OpenGLDrv.h:165
Definition OpenGLResources.h:1180
Definition OpenGLState.h:67
Definition OpenGLResources.h:1324
Definition OpenGLResources.h:918
Definition OpenGLResources.h:1365
Definition RHIResources.h:696
Definition RHIResources.h:733
Definition RHIResources.h:1581
Definition RHICommandList.h:455
Definition RHICommandList.h:4626
Definition RHIResources.h:1018
Definition RHIResources.h:4294
Definition RHIResources.h:4073
Definition RHIResources.h:686
Definition RHIResources.h:2387
Definition RHIResources.h:978
Definition RHIResources.h:5097
Definition RHIResources.h:1058
Definition RHIResources.h:947
Definition RHIResources.h:972
Definition RHIResources.h:679
Definition RHIResources.h:2444
Definition RHIResources.h:4018
Definition RHIResources.h:4167
Definition RHIResources.h:3981
Definition RHIResources.h:2153
virtual void * GetTextureBaseRHI()
Definition RHIResources.h:2207
Definition RHIResources.h:1232
Definition RHIResources.h:3294
Definition RHIResources.h:725
Definition RHIResources.h:954
Definition RHIResources.h:1265
Definition RHIResources.h:2515
Definition RHITypes.h:16
Definition SecureHash.h:226
Definition ThreadSafeCounter.h:14
Definition RHIContext.h:49
Definition DynamicRHI.h:1472
Definition RHIContext.h:903
Definition RHIContext.h:693
Definition RHIContext.h:257
UE::RHI::GPUProfiler::FEvent::FStats StatEvent
Definition RHIContext.h:567
Definition RHIContext.h:234
Definition RHI.Build.cs:8
Definition ArrayView.h:139
Definition Array.h:670
Definition BoundShaderStateHistory.h:14
Definition RenderResource.h:543
Definition IndirectArray.h:20
Definition UnrealString.h.inl:34
Definition OpenGLResources.h:116
Definition RHIPipeline.h:55
UE_FORCEINLINE_HINT ReferencedType * GetReference() const
Definition RefCounting.h:584
Type
Definition RHIFeatureLevel.h:20
@ Num
Definition RHIFeatureLevel.h:54
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
static FORCEINLINE bool SupportsDisjointTimeQueries()
Definition AndroidOpenGL.h:61
Definition RHIResources.h:246
Definition Color.h:486
Definition Color.h:48
TArray< FTextureStage > Textures
Definition OpenGLState.h:281
Definition OpenGLState.h:316
GLuint ElementArrayBufferBound
Definition OpenGLState.h:336
GLuint StorageBufferBound
Definition OpenGLState.h:337
GLuint ArrayBufferBound
Definition OpenGLState.h:335
GLuint UniformBufferBound
Definition OpenGLState.h:339
GLuint PixelUnpackBufferBound
Definition OpenGLState.h:338
uint32 MipIndex
Definition OpenGLDrv.h:585
void * RHIBuffer
Definition OpenGLDrv.h:583
EResourceLockMode LockMode
Definition OpenGLDrv.h:589
uint32 BufferSize
Definition OpenGLDrv.h:587
FORCEINLINE_DEBUGGABLE FLockParams(void *InRHIBuffer, void *InBuffer, uint32 InArrayIndex, uint32 InMipIndex, uint32 InStride, uint32 InBufferSize, EResourceLockMode InLockMode)
Definition OpenGLDrv.h:591
uint32 ArrayIndex
Definition OpenGLDrv.h:586
Definition OpenGLDrv.h:580
FORCEINLINE_DEBUGGABLE void Lock(void *RHIBuffer, void *Buffer, uint32 ArrayIndex, uint32 MipIndex, uint32 Stride, uint32 SizeRHI, EResourceLockMode LockMode)
Definition OpenGLDrv.h:607
FTextureLockTracker()
Definition OpenGLDrv.h:604
FORCEINLINE_DEBUGGABLE FLockParams Unlock(void *RHIBuffer, uint32 ArrayIndex, uint32 MipIndex)
Definition OpenGLDrv.h:618
TArray< FLockParams, TInlineAllocator< 16 > > OutstandingLocks
Definition OpenGLDrv.h:602
Definition OpenGLDrv.h:212
FOpenGLDisjointTimeStampQuery DisjointGPUFrameTimeQuery[MAX_GPUFRAMEQUERIES]
Definition OpenGLDrv.h:218
virtual FGPUProfilerEventNode * CreateEventNode(const TCHAR *InName, FGPUProfilerEventNode *InParent) override
Definition OpenGLDrv.h:236
TIndirectArray< FOpenGLEventNodeFrame > GPUHitchEventNodeFrames
Definition OpenGLDrv.h:227
void Cleanup()
Definition OpenGLDrv.cpp:478
void EndFrame()
Definition OpenGLDrv.cpp:306
FOpenGLBufferedGPUTiming FrameTiming
Definition OpenGLDrv.h:214
FOpenGLGPUProfiler()
Definition OpenGLDrv.h:229
int32 NestedFrameCount
Definition OpenGLDrv.h:222
uint32 ExternalGPUTime
Definition OpenGLDrv.h:224
int32 CurrentGPUFrameQueryIndex
Definition OpenGLDrv.h:219
static const int MAX_GPUFRAMEQUERIES
Definition OpenGLDrv.h:217
void BeginFrame()
Definition OpenGLDrv.cpp:245
Definition OpenGLState.h:421
bool bAnyDirtyGraphicsUniformBuffers
Definition OpenGLState.h:476
Definition OpenGLState.h:263
Definition LinuxOpenGLPlatform.cpp:175
Definition RHIResources.h:1417
Definition RHIBufferInitializer.h:12
Definition DynamicRHI.h:120
Definition RHICommandList.h:183
Definition MultiGPU.h:33
Definition DynamicRHI.h:149
Definition DynamicRHI.h:198
Definition RHIResources.h:5248
Definition RHIShaderParameters.h:32
Definition RHIShaderParameters.h:354
Definition RHIShaderParameters.h:16
Definition RHIResources.h:1938
Definition RHIResources.h:1689
Definition RHITextureInitializer.h:50
Definition RHITransition.h:475
Definition RHIResources.h:1150
Definition RHIResources.h:2648
Definition RHI.h:278
Definition RHI.h:232
Definition RHIStats.h:12
Definition OpenGLState.h:199
Definition RHITypes.h:127
Definition RHITypes.h:155
Definition RHI.h:507
Definition IOpenGLDynamicRHI.h:9
Definition LinuxPlatformSplash.cpp:43
Definition OpenGLResources.h:1473
Definition Optional.h:131
Definition Tuple.h:652
Definition IntPoint.h:25
Definition GPUProfiler.h:196