mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-29 22:22:54 +02:00
Update menu, initial state for texture management
This commit is contained in:
parent
9e929ca629
commit
192c72ff99
7 changed files with 26 additions and 37 deletions
|
@ -387,21 +387,9 @@ Menu::Menu() {
|
||||||
});
|
});
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
#define MIN_CORES_FOR_INCREMENTAL_TEXTURES 5
|
// Developer > Render > Enable Sparse Textures
|
||||||
bool recommendedIncrementalTransfers = (QThread::idealThreadCount() >= MIN_CORES_FOR_INCREMENTAL_TEXTURES);
|
|
||||||
bool recommendedSparseTextures = recommendedIncrementalTransfers;
|
|
||||||
|
|
||||||
qDebug() << "[TEXTURE TRANSFER SUPPORT]"
|
|
||||||
<< "\n\tidealThreadCount:" << QThread::idealThreadCount()
|
|
||||||
<< "\n\tRECOMMENDED enableSparseTextures:" << recommendedSparseTextures
|
|
||||||
<< "\n\tRECOMMENDED enableIncrementalTextures:" << recommendedIncrementalTransfers;
|
|
||||||
|
|
||||||
gpu::Texture::setEnableIncrementalTextureTransfers(recommendedIncrementalTransfers);
|
|
||||||
gpu::Texture::setEnableSparseTextures(recommendedSparseTextures);
|
|
||||||
|
|
||||||
// Developer > Render > Enable Dynamic Texture Management
|
|
||||||
{
|
{
|
||||||
auto action = addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::EnableDynamicTextureManagement, 0, recommendedSparseTextures);
|
auto action = addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::SparseTextureManagement, 0, gpu::Texture::getEnableSparseTextures());
|
||||||
connect(action, &QAction::triggered, [&](bool checked) {
|
connect(action, &QAction::triggered, [&](bool checked) {
|
||||||
qDebug() << "[TEXTURE TRANSFER SUPPORT] --- Enable Dynamic Texture Management menu option:" << checked;
|
qDebug() << "[TEXTURE TRANSFER SUPPORT] --- Enable Dynamic Texture Management menu option:" << checked;
|
||||||
gpu::Texture::setEnableSparseTextures(checked);
|
gpu::Texture::setEnableSparseTextures(checked);
|
||||||
|
@ -410,7 +398,7 @@ Menu::Menu() {
|
||||||
|
|
||||||
// Developer > Render > Enable Incremental Texture Transfer
|
// Developer > Render > Enable Incremental Texture Transfer
|
||||||
{
|
{
|
||||||
auto action = addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::EnableIncrementalTextureTransfer, 0, recommendedIncrementalTransfers);
|
auto action = addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::IncrementalTextureTransfer, 0, gpu::Texture::getEnableIncrementalTextureTransfers());
|
||||||
connect(action, &QAction::triggered, [&](bool checked) {
|
connect(action, &QAction::triggered, [&](bool checked) {
|
||||||
qDebug() << "[TEXTURE TRANSFER SUPPORT] --- Enable Incremental Texture Transfer menu option:" << checked;
|
qDebug() << "[TEXTURE TRANSFER SUPPORT] --- Enable Incremental Texture Transfer menu option:" << checked;
|
||||||
gpu::Texture::setEnableIncrementalTextureTransfers(checked);
|
gpu::Texture::setEnableIncrementalTextureTransfers(checked);
|
||||||
|
|
|
@ -97,8 +97,6 @@ namespace MenuOption {
|
||||||
const QString EchoLocalAudio = "Echo Local Audio";
|
const QString EchoLocalAudio = "Echo Local Audio";
|
||||||
const QString EchoServerAudio = "Echo Server Audio";
|
const QString EchoServerAudio = "Echo Server Audio";
|
||||||
const QString EnableCharacterController = "Enable avatar collisions";
|
const QString EnableCharacterController = "Enable avatar collisions";
|
||||||
const QString EnableIncrementalTextureTransfer = "Enable Incremental Texture Transfer";
|
|
||||||
const QString EnableDynamicTextureManagement = "Enable Dynamic Texture Management";
|
|
||||||
const QString EnableInverseKinematics = "Enable Inverse Kinematics";
|
const QString EnableInverseKinematics = "Enable Inverse Kinematics";
|
||||||
const QString ExpandMyAvatarSimulateTiming = "Expand /myAvatar/simulation";
|
const QString ExpandMyAvatarSimulateTiming = "Expand /myAvatar/simulation";
|
||||||
const QString ExpandMyAvatarTiming = "Expand /myAvatar";
|
const QString ExpandMyAvatarTiming = "Expand /myAvatar";
|
||||||
|
@ -114,6 +112,7 @@ namespace MenuOption {
|
||||||
const QString FrameTimer = "Show Timer";
|
const QString FrameTimer = "Show Timer";
|
||||||
const QString FullscreenMirror = "Mirror";
|
const QString FullscreenMirror = "Mirror";
|
||||||
const QString Help = "Help...";
|
const QString Help = "Help...";
|
||||||
|
const QString IncrementalTextureTransfer = "Enable Incremental Texture Transfer";
|
||||||
const QString IncreaseAvatarSize = "Increase Avatar Size";
|
const QString IncreaseAvatarSize = "Increase Avatar Size";
|
||||||
const QString IndependentMode = "Independent Mode";
|
const QString IndependentMode = "Independent Mode";
|
||||||
const QString ActionMotorControl = "Enable Default Motor Control";
|
const QString ActionMotorControl = "Enable Default Motor Control";
|
||||||
|
@ -180,6 +179,7 @@ namespace MenuOption {
|
||||||
const QString StandingHMDSensorMode = "Standing HMD Sensor Mode";
|
const QString StandingHMDSensorMode = "Standing HMD Sensor Mode";
|
||||||
const QString SimulateEyeTracking = "Simulate";
|
const QString SimulateEyeTracking = "Simulate";
|
||||||
const QString SMIEyeTracking = "SMI Eye Tracking";
|
const QString SMIEyeTracking = "SMI Eye Tracking";
|
||||||
|
const QString SparseTextureManagement = "Enable Sparse Texture Management";
|
||||||
const QString Stats = "Stats";
|
const QString Stats = "Stats";
|
||||||
const QString StopAllScripts = "Stop All Scripts";
|
const QString StopAllScripts = "Stop All Scripts";
|
||||||
const QString SuppressShortTimings = "Suppress Timings Less than 10ms";
|
const QString SuppressShortTimings = "Suppress Timings Less than 10ms";
|
||||||
|
|
|
@ -177,7 +177,6 @@ public:
|
||||||
virtual void queueLambda(const std::function<void()> lambda) const;
|
virtual void queueLambda(const std::function<void()> lambda) const;
|
||||||
|
|
||||||
bool isTextureManagementSparseEnabled() const override { return (_textureManagement._sparseCapable && Texture::getEnableSparseTextures()); }
|
bool isTextureManagementSparseEnabled() const override { return (_textureManagement._sparseCapable && Texture::getEnableSparseTextures()); }
|
||||||
bool isTextureManagementIncrementalTransferEnabled() const override { return (_textureManagement._incrementalTransferCapable && Texture::getEnableIncrementalTextureTransfers()); }
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
@ -369,7 +368,6 @@ protected:
|
||||||
|
|
||||||
struct TextureManagementStageState {
|
struct TextureManagementStageState {
|
||||||
bool _sparseCapable { false };
|
bool _sparseCapable { false };
|
||||||
bool _incrementalTransferCapable { false };
|
|
||||||
} _textureManagement;
|
} _textureManagement;
|
||||||
virtual void initTextureManagementStage() {}
|
virtual void initTextureManagementStage() {}
|
||||||
|
|
||||||
|
|
|
@ -148,13 +148,9 @@ uint32_t SparseInfo::getPageCount(const uvec3& dimensions) const {
|
||||||
return pageCounts.x * pageCounts.y * pageCounts.z;
|
return pageCounts.x * pageCounts.y * pageCounts.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void GL45Backend::initTextureManagementStage() {
|
void GL45Backend::initTextureManagementStage() {
|
||||||
|
|
||||||
// enable the Sparse Texture on gl45
|
// enable the Sparse Texture on gl45
|
||||||
_textureManagement._sparseCapable = true;
|
_textureManagement._sparseCapable = true;
|
||||||
_textureManagement._incrementalTransferCapable = true;
|
|
||||||
|
|
||||||
// But now let s refine the behavior based on vendor
|
// But now let s refine the behavior based on vendor
|
||||||
std::string vendor { (const char*)glGetString(GL_VENDOR) };
|
std::string vendor { (const char*)glGetString(GL_VENDOR) };
|
||||||
|
@ -383,8 +379,7 @@ void GL45Texture::startTransfer() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GL45Texture::continueTransfer() {
|
bool GL45Texture::continueTransfer() {
|
||||||
auto backend = _backend.lock();
|
if (!Texture::getEnableIncrementalTextureTransfers()) {
|
||||||
if (!backend || !backend->isTextureManagementIncrementalTransferEnabled()) {
|
|
||||||
size_t maxFace = GL_TEXTURE_CUBE_MAP == _target ? CUBE_NUM_FACES : 1;
|
size_t maxFace = GL_TEXTURE_CUBE_MAP == _target ? CUBE_NUM_FACES : 1;
|
||||||
for (uint8_t face = 0; face < maxFace; ++face) {
|
for (uint8_t face = 0; face < maxFace; ++face) {
|
||||||
for (uint16_t mipLevel = _minMip; mipLevel <= _maxMip; ++mipLevel) {
|
for (uint16_t mipLevel = _minMip; mipLevel <= _maxMip; ++mipLevel) {
|
||||||
|
|
|
@ -86,7 +86,6 @@ public:
|
||||||
void getStats(ContextStats& stats) const { stats = _stats; }
|
void getStats(ContextStats& stats) const { stats = _stats; }
|
||||||
|
|
||||||
virtual bool isTextureManagementSparseEnabled() const = 0;
|
virtual bool isTextureManagementSparseEnabled() const = 0;
|
||||||
virtual bool isTextureManagementIncrementalTransferEnabled() const = 0;
|
|
||||||
|
|
||||||
// These should only be accessed by Backend implementation to repport the buffer and texture allocations,
|
// These should only be accessed by Backend implementation to repport the buffer and texture allocations,
|
||||||
// they are NOT public calls
|
// they are NOT public calls
|
||||||
|
|
|
@ -10,13 +10,14 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
|
|
||||||
#include <QtCore/QDebug>
|
|
||||||
|
|
||||||
#include "Texture.h"
|
#include "Texture.h"
|
||||||
|
|
||||||
#include <glm/gtc/constants.hpp>
|
#include <glm/gtc/constants.hpp>
|
||||||
#include <glm/gtx/component_wise.hpp>
|
#include <glm/gtx/component_wise.hpp>
|
||||||
|
|
||||||
|
#include <QtCore/QDebug>
|
||||||
|
#include <QtCore/QThread>
|
||||||
|
|
||||||
#include <NumericalConstants.h>
|
#include <NumericalConstants.h>
|
||||||
|
|
||||||
#include "GPULogging.h"
|
#include "GPULogging.h"
|
||||||
|
@ -32,16 +33,27 @@ std::atomic<uint32_t> Texture::_textureCPUCount{ 0 };
|
||||||
std::atomic<Texture::Size> Texture::_textureCPUMemoryUsage{ 0 };
|
std::atomic<Texture::Size> Texture::_textureCPUMemoryUsage{ 0 };
|
||||||
std::atomic<Texture::Size> Texture::_allowedCPUMemoryUsage { 0 };
|
std::atomic<Texture::Size> Texture::_allowedCPUMemoryUsage { 0 };
|
||||||
|
|
||||||
std::atomic<bool> Texture::_enableSparseTextures { false };
|
|
||||||
std::atomic<bool> Texture::_enableIncrementalTextureTransfers { false };
|
#define MIN_CORES_FOR_INCREMENTAL_TEXTURES 5
|
||||||
|
bool recommendedIncrementalTransfers = (QThread::idealThreadCount() >= MIN_CORES_FOR_INCREMENTAL_TEXTURES);
|
||||||
|
bool recommendedSparseTextures = recommendedIncrementalTransfers;
|
||||||
|
|
||||||
|
std::atomic<bool> Texture::_enableSparseTextures { recommendedIncrementalTransfers };
|
||||||
|
std::atomic<bool> Texture::_enableIncrementalTextureTransfers { recommendedSparseTextures };
|
||||||
|
|
||||||
|
struct ReportTextureState {
|
||||||
|
ReportTextureState() {
|
||||||
|
qDebug() << "[TEXTURE TRANSFER SUPPORT]"
|
||||||
|
<< "\n\tidealThreadCount:" << QThread::idealThreadCount()
|
||||||
|
<< "\n\tRECOMMENDED enableSparseTextures:" << recommendedSparseTextures
|
||||||
|
<< "\n\tRECOMMENDED enableIncrementalTextures:" << recommendedIncrementalTransfers;
|
||||||
|
}
|
||||||
|
} report;
|
||||||
|
|
||||||
void Texture::setEnableSparseTextures(bool enabled) {
|
void Texture::setEnableSparseTextures(bool enabled) {
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
qDebug() << "[TEXTURE TRANSFER SUPPORT] SETTING - Enable Sparse Textures and Dynamic Texture Management:" << enabled;
|
qDebug() << "[TEXTURE TRANSFER SUPPORT] SETTING - Enable Sparse Textures and Dynamic Texture Management:" << enabled;
|
||||||
_enableSparseTextures = enabled;
|
_enableSparseTextures = enabled;
|
||||||
if (!_enableIncrementalTextureTransfers && _enableSparseTextures) {
|
|
||||||
qDebug() << "[TEXTURE TRANSFER SUPPORT] WARNING - Sparse texture management requires incremental texture transfer enabled.";
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
qDebug() << "[TEXTURE TRANSFER SUPPORT] Sparse Textures and Dynamic Texture Management not supported on this platform.";
|
qDebug() << "[TEXTURE TRANSFER SUPPORT] Sparse Textures and Dynamic Texture Management not supported on this platform.";
|
||||||
#endif
|
#endif
|
||||||
|
@ -51,9 +63,6 @@ void Texture::setEnableIncrementalTextureTransfers(bool enabled) {
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
qDebug() << "[TEXTURE TRANSFER SUPPORT] SETTING - Enable Incremental Texture Transfer:" << enabled;
|
qDebug() << "[TEXTURE TRANSFER SUPPORT] SETTING - Enable Incremental Texture Transfer:" << enabled;
|
||||||
_enableIncrementalTextureTransfers = enabled;
|
_enableIncrementalTextureTransfers = enabled;
|
||||||
if (!_enableIncrementalTextureTransfers && _enableSparseTextures) {
|
|
||||||
qDebug() << "[TEXTURE TRANSFER SUPPORT] WARNING - Sparse texture management requires incremental texture transfer enabled.";
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
qDebug() << "[TEXTURE TRANSFER SUPPORT] Incremental Texture Transfer not supported on this platform.";
|
qDebug() << "[TEXTURE TRANSFER SUPPORT] Incremental Texture Transfer not supported on this platform.";
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -369,7 +369,7 @@ public:
|
||||||
// = 1 + log2(max(width, height, depth))
|
// = 1 + log2(max(width, height, depth))
|
||||||
uint16 evalNumMips() const;
|
uint16 evalNumMips() const;
|
||||||
|
|
||||||
static uint16 evalNumMips(const Vec3u& dimnsions);
|
static uint16 evalNumMips(const Vec3u& dimensions);
|
||||||
|
|
||||||
// Eval the size that the mips level SHOULD have
|
// Eval the size that the mips level SHOULD have
|
||||||
// not the one stored in the Texture
|
// not the one stored in the Texture
|
||||||
|
|
Loading…
Reference in a new issue