UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SparseVolumeTextureStreamingInstance.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4#include "CoreMinimal.h"
5
6namespace UE
7{
8namespace SVT
9{
10
11enum class EStreamingRequestFlags : uint8;
12
13// A streaming request that can be passed to FStreamingInstance.
30
31// Represents a streaming instance of a SVT. It is a "window" into the frame sequence that moves along the playback direction and is also identified by a "key", which is a user assigned value.
32// The FStreamingInstance is used to cache the prefetch direction, to compute the total bandwidth requirements of all streaming SVTs and to determine the allocated bandwidth for a given SVT instance.
34{
35public:
36 explicit FStreamingInstance(uint32 Key, int32 NumFrames, const TArrayView<uint32>& MipLevelStreamingSizes, const FStreamingInstanceRequest& Request);
37 void AddRequest(const FStreamingInstanceRequest& Request);
38 // Returns the lowest mip level which can be continuously streamed while staying within the given bandwidth budget.
40 // Returns the bandwidth required to stream the SVT at the requested mip level. This is relevant for non-blocking streaming, so it can optionally return zero if the instance is using blocking requests.
42 // Returns true if the given frame is within the "window" of this instance.
43 bool IsFrameInWindow(float FrameIndex) const;
44 // Computes a fractional mip level which corresponds to StreamingMemorySizeOf(RequestedMipLevel) * Percentage.
45 float GetPrefetchMipLevel(float RequestedMipLevel, float Percentage) const;
46 uint32 GetKey() const { return Key; }
47 uint32 GetUpdateIndex() const { return UpdateIndex; }
48 float GetEstimatedFrameRate() const { return EstimatedFrameRate; }
49 float GetAverageFrame() const { return AverageFrame; }
50 float GetLowestRequestedMipLevel() const { return LowestRequestedMip; }
51 float GetLowestMipLevelInBandwidthBudget() const { return LowestMipInBandwidthBudget; }
52 bool IsPlayingForwards() const { return bPlayForwards; }
53 bool IsPlayingBackwards() const { return bPlayBackwards; }
54
55private:
56 const TArrayView<uint32> MipLevelStreamingSizes;
57 const uint32 Key;
58 const int32 NumFrames;
59 double PreviousAverageRequestIssueTime = 0.0;
60 double AverageRequestIssueTime = 0.0;
61 double DeltaTime = 0.0;
62 uint32 UpdateIndex = 0;
63 float PreviousAverageFrame = -1.0f;
64 float AverageFrame = -1.0f; // Frame index this window is centered around
65 float EstimatedFrameRate = 0.0f;
66 int32 NumRequestsThisUpdate = 0;
67 float LowestRequestedMip = FLT_MAX;
68 float LowestRequestedBlockingMip = FLT_MAX;
69 float LowestMipInBandwidthBudget = 0.0f;
70 bool bPlayForwards = false;
71 bool bPlayBackwards = false;
72 bool bIsBlocking = false;
73
74 // Returns the shortest signed distance between From and To, potentially wrapping around the 0 - NumFrames range.
75 static float GetShortestWrappedDistance(float To, float From, int32 NumFrames);
76 // Computes a weighted average between ValueA and ValueB, applying wrapping logic to both the calculation and the result.
77 static float GetWrappedWeightedAverage(float ValueA, float WeightA, float ValueB, float WeightB, int32 NumFrames);
78 // Rounds up to the next multiple of r.SparseVolumeTexture.Streaming.RequestSizeGranularity
79 static int64 ApplyDiscretization(int64 Value);
80 // Get the streaming size of the fractional mip level. GetStreamingSize(MipLevel) * FrameRate is the required peak bandwidth in bytes/s.
81 int64 GetStreamingSize(float MipLevel) const;
82};
83
84}
85}
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
@ Percentage
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition ArrayView.h:139
Definition SparseVolumeTextureStreamingInstance.h:34
bool IsPlayingForwards() const
Definition SparseVolumeTextureStreamingInstance.h:52
float GetAverageFrame() const
Definition SparseVolumeTextureStreamingInstance.h:49
int64 GetRequestedBandwidth(bool bZeroIfBlocking) const
Definition SparseVolumeTextureStreamingInstance.cpp:149
bool IsPlayingBackwards() const
Definition SparseVolumeTextureStreamingInstance.h:53
uint32 GetKey() const
Definition SparseVolumeTextureStreamingInstance.h:46
float GetEstimatedFrameRate() const
Definition SparseVolumeTextureStreamingInstance.h:48
bool IsFrameInWindow(float FrameIndex) const
Definition SparseVolumeTextureStreamingInstance.cpp:161
float GetLowestRequestedMipLevel() const
Definition SparseVolumeTextureStreamingInstance.h:50
float GetLowestMipLevelInBandwidthBudget() const
Definition SparseVolumeTextureStreamingInstance.h:51
float GetPrefetchMipLevel(float RequestedMipLevel, float Percentage) const
Definition SparseVolumeTextureStreamingInstance.cpp:172
uint32 GetUpdateIndex() const
Definition SparseVolumeTextureStreamingInstance.h:47
void AddRequest(const FStreamingInstanceRequest &Request)
Definition SparseVolumeTextureStreamingInstance.cpp:66
void ComputeLowestMipLevelInBandwidthBudget(int64 BandwidthBudget)
Definition SparseVolumeTextureStreamingInstance.cpp:114
EStreamingRequestFlags
Definition ISparseVolumeTextureStreamingManager.h:47
Definition AdvancedWidgetsModule.cpp:13
Definition SparseVolumeTextureStreamingInstance.h:15
float FrameIndex
Definition SparseVolumeTextureStreamingInstance.h:19
bool HasValidFrameRate() const
Definition SparseVolumeTextureStreamingInstance.cpp:41
EStreamingRequestFlags Flags
Definition SparseVolumeTextureStreamingInstance.h:21
uint32 UpdateIndex
Definition SparseVolumeTextureStreamingInstance.h:16
double Time
Definition SparseVolumeTextureStreamingInstance.h:17
bool IsBlocking() const
Definition SparseVolumeTextureStreamingInstance.cpp:36
float MipLevel
Definition SparseVolumeTextureStreamingInstance.h:20
FStreamingInstanceRequest(uint32 InUpdateIndex, double InTime, float InFrameRate, float InFrameIndex, float InMipLevel, EStreamingRequestFlags InFlags)
Definition SparseVolumeTextureStreamingInstance.h:24
float FrameRate
Definition SparseVolumeTextureStreamingInstance.h:18