UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
VulkanPendingState.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved..
2
3/*=============================================================================
4 VulkanPendingState.h: Private VulkanPendingState definitions.
5=============================================================================*/
6
7#pragma once
8
9// Dependencies
10#include "VulkanConfiguration.h"
11#include "VulkanState.h"
12#include "VulkanResources.h"
13#include "VulkanUtil.h"
14#include "VulkanViewport.h"
15#include "VulkanDynamicRHI.h"
16#include "VulkanPipeline.h"
17#include "VulkanPipelineState.h"
18
19// All the current compute pipeline states in use
21{
22public:
27
29
30 void Reset()
31 {
32 CurrentPipeline = nullptr;
33 CurrentState = nullptr;
34 }
35
56
58
60 {
61 return CurrentPipeline ? ResourceCast(CurrentPipeline->GetComputeShader()) : nullptr;
62 }
63
65
70
75
80
85
87
92
93 inline void SetPackedGlobalShaderParameter(uint32 BufferIndex, uint32 Offset, uint32 NumBytes, const void* NewValue)
94 {
95 CurrentState->SetPackedGlobalShaderParameter(BufferIndex, Offset, NumBytes, NewValue);
96 }
97
102
107
108protected:
111
113
115
117};
118
119// All the current gfx pipeline states in use
121{
122public:
128
130
131 void Reset()
132 {
133 Viewports.SetNumZeroed(1);
134 Scissors.SetNumZeroed(1);
135 StencilRef = 0;
136 bScissorEnable = false;
137
138 CurrentPipeline = nullptr;
139 CurrentState = nullptr;
140 bDirtyVertexStreams = true;
142
144
145 //#todo-rco: Would this cause issues?
146 //FMemory::Memzero(PendingStreams);
147 }
148
153
158
163
164 void SetViewport(float MinX, float MinY, float MinZ, float MaxX, float MaxY, float MaxZ)
165 {
166 Viewports.SetNumZeroed(1);
167
168 Viewports[0].x = MinX;
169 Viewports[0].y = MinY;
170 Viewports[0].width = MaxX - MinX;
171 Viewports[0].height = MaxY - MinY;
172 Viewports[0].minDepth = MinZ;
173 if (MinZ == MaxZ)
174 {
175 // Engine pases in some cases MaxZ as 0.0
176 Viewports[0].maxDepth = MinZ + 1.0f;
177 }
178 else
179 {
180 Viewports[0].maxDepth = MaxZ;
181 }
182
183 SetScissorRect((uint32)MinX, (uint32)MinY, (uint32)(MaxX - MinX), (uint32)(MaxY - MinY));
184 bScissorEnable = false;
185 }
186
188 {
190
191 // Set the scissor rects appropriately.
192 Scissors.SetNumZeroed(Viewports.Num());
193 for (int32 Idx = 0; Idx < Scissors.Num(); ++Idx)
194 {
195 Scissors[Idx].offset.x = Viewports[Idx].x;
196 Scissors[Idx].offset.y = Viewports[Idx].y;
197 Scissors[Idx].extent.width = Viewports[Idx].width;
198 Scissors[Idx].extent.height = Viewports[Idx].height;
199 }
200 bScissorEnable = true;
201 }
202
203 void SetScissor(bool bInEnable, uint32 MinX, uint32 MinY, uint32 MaxX, uint32 MaxY)
204 {
205 if (bInEnable)
206 {
207 SetScissorRect(MinX, MinY, MaxX - MinX, MaxY - MinY);
208 }
209 else
210 {
211 checkf(Viewports.Num() > 0, TEXT("At least one Viewport is expected to be configured."));
212 SetScissorRect(Viewports[0].x, Viewports[0].y, Viewports[0].width, Viewports[0].height);
213 }
214
216 }
217
218 void SetScissorRect(uint32 MinX, uint32 MinY, uint32 Width, uint32 Height)
219 {
220 Scissors.SetNumZeroed(1);
221
222 Scissors[0].offset.x = MinX;
223 Scissors[0].offset.y = MinY;
224 Scissors[0].extent.width = Width;
225 Scissors[0].extent.height = Height;
226 }
227
229 {
230 PendingStreams[StreamIndex].Stream = VertexBuffer;
231 PendingStreams[StreamIndex].BufferOffset = Offset;
232 bDirtyVertexStreams = true;
233 }
234
235 void Bind(VkCommandBuffer CmdBuffer)
236 {
237 CurrentPipeline->Bind(CmdBuffer);
238 }
239
241 {
242 CurrentState->SetTexture(Stage, ParameterIndex, Texture, Layout);
243 }
244
249
250 template<bool bDynamic>
255
257
259 {
260 SetUAVForUBResource(Stage, ParameterIndex, UAV);
261 }
262
264
266 {
267 SetSRVForUBResource(Stage, ParameterIndex, SRV);
268 }
269
271 {
272 CurrentState->SetSamplerState(Stage, ParameterIndex, Sampler);
273 }
274
279
280 void SetPackedGlobalShaderParameter(ShaderStage::EStage Stage, uint32 BufferIndex, uint32 Offset, uint32 NumBytes, const void* NewValue)
281 {
282 CurrentState->SetPackedGlobalShaderParameter(Stage, BufferIndex, Offset, NumBytes, NewValue);
283 }
284
286
288
289 void UpdateDynamicStates(FVulkanCommandBuffer& CommandBuffer);
290
292 {
294 {
296 }
297 }
298
303
304protected:
307
311
313
316
318
333
335
337
339};
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define TEXT(x)
Definition Platform.h:1272
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
EShaderFrequency
Definition RHIDefinitions.h:202
@ MaxVertexElementCount
Definition RHIDefinitions.h:276
EPrimitiveType
Definition RHIDefinitions.h:822
@ PT_Num
Definition RHIDefinitions.h:846
uint32 Offset
Definition VulkanMemory.cpp:4033
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
FRHIComputeShader * GetComputeShader() const
Definition RHIResources.h:1092
Definition VulkanCommandBuffer.h:43
Definition VulkanContext.h:241
void SetUniformBuffer(uint8 DescriptorSet, uint32 BindingIndex, const FVulkanUniformBuffer *UniformBuffer)
Definition VulkanPipelineState.h:98
void SetSamplerState(uint8 DescriptorSet, uint32 BindingIndex, const FVulkanSamplerState *Sampler)
Definition VulkanPipelineState.h:84
void SetTexture(uint8 DescriptorSet, uint32 BindingIndex, const FVulkanTexture *Texture, VkImageLayout Layout)
Definition VulkanPipelineState.h:68
Definition VulkanPipelineState.h:182
void Reset()
Definition VulkanPipelineState.h:190
void SetPackedGlobalShaderParameter(uint32 BufferIndex, uint32 ByteOffset, uint32 NumBytes, const void *NewValue)
Definition VulkanPipelineState.h:196
FVulkanComputePipeline * ComputePipeline
Definition VulkanPipelineState.h:229
Definition VulkanPipeline.h:705
Definition VulkanDevice.h:279
Definition VulkanFramebuffer.h:8
Definition VulkanPipelineState.h:239
void SetPackedGlobalShaderParameter(uint8 Stage, uint32 BufferIndex, uint32 ByteOffset, uint32 NumBytes, const void *NewValue)
Definition VulkanPipelineState.h:247
Definition VulkanPipeline.h:735
const FVulkanShader * GetVulkanShader(EShaderFrequency Frequency) const
Definition VulkanPipeline.h:761
const uint64 GetShaderKey(EShaderFrequency Frequency) const
Definition VulkanPipeline.h:755
void Bind(VkCommandBuffer CmdBuffer)
Definition VulkanPipeline.h:750
Definition VulkanPendingState.h:21
void NotifyDeletedPipeline(FVulkanComputePipeline *Pipeline)
Definition VulkanPendingState.h:103
void SetSamplerStateForStage(uint32 SamplerIndex, FVulkanSamplerState *Sampler)
Definition VulkanPendingState.h:76
~FVulkanPendingComputeState()
Definition VulkanPendingState.cpp:321
void PrepareForDispatch(FVulkanCommandListContext &Context)
Definition VulkanPendingState.cpp:343
void SetSRVForUBResource(uint32 DescriptorSet, uint32 BindingIndex, FVulkanShaderResourceView *SRV)
Definition VulkanPendingState.cpp:330
FVulkanComputePipeline * CurrentPipeline
Definition VulkanPendingState.h:109
FVulkanDevice & Device
Definition VulkanPendingState.h:114
void Reset()
Definition VulkanPendingState.h:30
void SetSRVForStage(uint32 SRVIndex, FVulkanShaderResourceView *SRV)
Definition VulkanPendingState.h:88
const FVulkanComputeShader * GetCurrentShader() const
Definition VulkanPendingState.h:59
TMap< FVulkanComputePipeline *, FVulkanComputePipelineDescriptorState * > PipelineStates
Definition VulkanPendingState.h:112
void SetComputePipeline(FVulkanComputePipeline *InComputePipeline)
Definition VulkanPendingState.h:36
void SetTextureForUBResource(int32 DescriptorSet, uint32 BindingIndex, const FVulkanTexture *Texture, VkImageLayout Layout)
Definition VulkanPendingState.h:81
void SetTextureForStage(uint32 TextureIndex, const FVulkanTexture *Texture, VkImageLayout Layout)
Definition VulkanPendingState.h:71
void SetUAVForStage(uint32 UAVIndex, FVulkanUnorderedAccessView *UAV)
Definition VulkanPendingState.h:66
void SetPackedGlobalShaderParameter(uint32 BufferIndex, uint32 Offset, uint32 NumBytes, const void *NewValue)
Definition VulkanPendingState.h:93
FVulkanPendingComputeState(FVulkanDevice &InDevice)
Definition VulkanPendingState.h:23
void SetUAVForUBResource(uint32 DescriptorSet, uint32 BindingIndex, FVulkanUnorderedAccessView *UAV)
Definition VulkanPendingState.cpp:336
void SetSamplerStateForUBResource(uint32 DescriptorSet, uint32 BindingIndex, FVulkanSamplerState *Sampler)
Definition VulkanPendingState.h:98
FVulkanComputePipelineDescriptorState * CurrentState
Definition VulkanPendingState.h:110
Definition VulkanPendingState.h:121
void SetScissorRect(uint32 MinX, uint32 MinY, uint32 Width, uint32 Height)
Definition VulkanPendingState.h:218
bool bDirtyDynamicVertexInput
Definition VulkanPendingState.h:332
const FVulkanShader * GetCurrentShader(EShaderFrequency Frequency) const
Definition VulkanPendingState.h:159
bool bNeedToClear
Definition VulkanPendingState.h:312
FVulkanGraphicsPipelineState * CurrentPipeline
Definition VulkanPendingState.h:314
void SetMultiViewport(const TArrayView< VkViewport > &InViewports)
Definition VulkanPendingState.h:187
void SetSamplerStateForStage(ShaderStage::EStage Stage, uint32 ParameterIndex, FVulkanSamplerState *Sampler)
Definition VulkanPendingState.h:270
void SetPackedGlobalShaderParameter(ShaderStage::EStage Stage, uint32 BufferIndex, uint32 Offset, uint32 NumBytes, const void *NewValue)
Definition VulkanPendingState.h:280
FVulkanPendingGfxState(FVulkanDevice &InDevice)
Definition VulkanPendingState.h:123
EPrimitiveType PrimitiveType
Definition VulkanPendingState.h:308
const uint64 GetCurrentShaderKey(ShaderStage::EStage Stage) const
Definition VulkanPendingState.h:154
void Bind(VkCommandBuffer CmdBuffer)
Definition VulkanPendingState.h:235
TArray< VkRect2D, TInlineAllocator< 2 > > Scissors
Definition VulkanPendingState.h:306
void SetTextureForStage(ShaderStage::EStage Stage, uint32 ParameterIndex, const FVulkanTexture *Texture, VkImageLayout Layout)
Definition VulkanPendingState.h:240
void SetSRVForStage(ShaderStage::EStage Stage, uint32 ParameterIndex, FVulkanShaderResourceView *SRV)
Definition VulkanPendingState.h:265
bool SetGfxPipeline(FVulkanGraphicsPipelineState *InGfxPipeline, bool bForceReset)
Definition VulkanPendingState.cpp:1140
TMap< FVulkanGraphicsPipelineState *, FVulkanGraphicsPipelineDescriptorState * > PipelineStates
Definition VulkanPendingState.h:317
void Reset()
Definition VulkanPendingState.h:131
void SetSamplerStateForUBResource(uint32 DescriptorSet, uint32 BindingIndex, FVulkanSamplerState *Sampler)
Definition VulkanPendingState.h:275
void PrepareForDraw(FVulkanCommandListContext &Context)
Definition VulkanPendingState.cpp:385
void SetViewport(float MinX, float MinY, float MinZ, float MaxX, float MaxY, float MaxZ)
Definition VulkanPendingState.h:164
bool bDirtyVertexStreams
Definition VulkanPendingState.h:331
void SetUAVForUBResource(uint8 DescriptorSet, uint32 BindingIndex, FVulkanUnorderedAccessView *UAV)
Definition VulkanPendingState.cpp:837
void SetSRVForUBResource(uint8 DescriptorSet, uint32 BindingIndex, FVulkanShaderResourceView *SRV)
Definition VulkanPendingState.cpp:831
FVulkanGraphicsPipelineDescriptorState * CurrentState
Definition VulkanPendingState.h:315
void NotifyDeletedPipeline(FVulkanGraphicsPipelineState *Pipeline)
Definition VulkanPendingState.h:299
FVulkanDevice & Device
Definition VulkanPendingState.h:336
void UpdateDynamicStates(FVulkanCommandBuffer &CommandBuffer)
Definition VulkanPendingState.cpp:498
void UpdateInputAttachments(FVulkanFramebuffer *Framebuffer)
Definition VulkanPendingState.cpp:793
const uint64 GetCurrentShaderKey(EShaderFrequency Frequency) const
Definition VulkanPendingState.h:149
bool bScissorEnable
Definition VulkanPendingState.h:310
uint32 StencilRef
Definition VulkanPendingState.h:309
void SetStreamSource(uint32 StreamIndex, VkBuffer VertexBuffer, uint32 Offset)
Definition VulkanPendingState.h:228
void SetStencilRef(uint32 InStencilRef)
Definition VulkanPendingState.h:291
void SetTextureForUBResource(uint8 DescriptorSet, uint32 BindingIndex, const FVulkanTexture *Texture, VkImageLayout Layout)
Definition VulkanPendingState.h:245
TArray< VkViewport, TInlineAllocator< 2 > > Viewports
Definition VulkanPendingState.h:305
void SetUniformBuffer(uint8 DescriptorSet, uint32 BindingIndex, const FVulkanUniformBuffer *UniformBuffer)
Definition VulkanPendingState.h:251
void SetScissor(bool bInEnable, uint32 MinX, uint32 MinY, uint32 MaxX, uint32 MaxY)
Definition VulkanPendingState.h:203
~FVulkanPendingGfxState()
Definition VulkanPendingState.cpp:374
FVertexStream PendingStreams[MaxVertexElementCount]
Definition VulkanPendingState.h:330
void SetUAVForStage(ShaderStage::EStage Stage, uint32 ParameterIndex, FVulkanUnorderedAccessView *UAV)
Definition VulkanPendingState.h:258
Definition VulkanState.h:17
Definition VulkanResources.h:1020
Definition VulkanResources.h:108
Definition VulkanResources.h:604
Definition VulkanResources.h:957
Definition VulkanResources.h:1003
Definition ArrayView.h:139
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition VulkanResources.h:257
EShaderFrequency GetFrequencyForGfxStage(EStage Stage)
Definition VulkanCommon.h:84
EStage
Definition VulkanCommon.h:35
@ Compute
Definition VulkanCommon.h:51
Definition VulkanPendingState.h:320
uint32 BufferOffset
Definition VulkanPendingState.h:328
VkBuffer Stream
Definition VulkanPendingState.h:327
FVertexStream()
Definition VulkanPendingState.h:321