summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormobserveur <mobserveur@gmail.com>2025-09-11 18:50:58 +0200
committermobserveur <mobserveur@gmail.com>2025-09-11 18:50:58 +0200
commit067d83b640d3fae45098ef8bc71e913c1eb65a44 (patch)
tree245cee2165d49b9c593d47f14f753c8e20373ae5
parentccf0114f36968d6cf6dfb11e1c5a035406314924 (diff)
Fix for multithreaded textures on Mac and more optimisations
This commit fixes an issue with the multithreaded textures option on Mac and adds some more optimisations.
-rw-r--r--indra/llwindow/llopenglview-objc.mm60
-rw-r--r--indra/newview/app_settings/settings.xml4
-rw-r--r--indra/newview/app_settings/shaders/class1/effects/bloomExtractF.glsl12
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/uiF.glsl3
-rw-r--r--indra/newview/lldynamictexture.cpp4
-rw-r--r--indra/newview/llreflectionmapmanager.cpp216
-rw-r--r--indra/newview/llreflectionmapmanager.h6
-rw-r--r--indra/newview/llviewerdisplay.cpp3
-rw-r--r--indra/newview/llviewerwindow.cpp4
-rw-r--r--indra/newview/pipeline.cpp44
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_graphics3.xml73
11 files changed, 153 insertions, 276 deletions
diff --git a/indra/llwindow/llopenglview-objc.mm b/indra/llwindow/llopenglview-objc.mm
index 577311bf49..7579f28656 100644
--- a/indra/llwindow/llopenglview-objc.mm
+++ b/indra/llwindow/llopenglview-objc.mm
@@ -160,8 +160,18 @@ attributedStringInfo getSegments(NSAttributedString *str)
- (void)viewWillMoveToWindow:(nullable NSWindow *)newWindow
{
- if(mHDRDisplay) self.wantsExtendedDynamicRangeOpenGLSurface = YES;
- //else self.wantsExtendedDynamicRangeOpenGLSurface = NO;
+ if(mHDRDisplay)
+ {
+ self.wantsExtendedDynamicRangeOpenGLSurface = YES;
+ NSLog(@"Wants Extended Dynamic Range OpenGL", nil);
+ }
+ /*
+ else
+ {
+ self.wantsExtendedDynamicRangeOpenGLSurface = NO;
+ NSLog(@"Wants Standard Color Range OpenGL", nil);
+ }
+ */
}
- (void)viewDidMoveToWindow
@@ -257,25 +267,34 @@ attributedStringInfo getSegments(NSAttributedString *str)
// Initialize with a default "safe" pixel format that will work with versions dating back to OS X 10.6.
// Any specialized pixel formats, i.e. a core profile pixel format, should be initialized through rebuildContextWithFormat.
// 10.7 and 10.8 don't really care if we're defining a profile or not. If we don't explicitly request a core or legacy profile, it'll always assume a legacy profile (for compatibility reasons).
- NSOpenGLPixelFormatAttribute SDRAttrs[] = {
- NSOpenGLPFADoubleBuffer,
- NSOpenGLPFASampleBuffers, 0,
- NSOpenGLPFASamples, 0,
- NSOpenGLPFAStencilSize, 8,
- NSOpenGLPFADepthSize, 24,
- NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion4_1Core,
- 0};
+
+ NSOpenGLPixelFormatAttribute SDRAttrs[] = {
+ NSOpenGLPFANoRecovery,
+ NSOpenGLPFADoubleBuffer,
+ NSOpenGLPFAClosestPolicy,
+ NSOpenGLPFAAccelerated,
+ NSOpenGLPFASampleBuffers, 0,
+ NSOpenGLPFASamples, 0,
+ NSOpenGLPFADepthSize, 24,
+ NSOpenGLPFAAlphaSize, 8,
+ NSOpenGLPFAColorSize, 32,
+ NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion4_1Core,
+ 0
+ };
NSOpenGLPixelFormatAttribute HDRAttrs[] = {
- NSOpenGLPFADoubleBuffer,
- NSOpenGLPFASampleBuffers, 0,
- NSOpenGLPFASamples, 0,
- NSOpenGLPFAStencilSize, 8,
- NSOpenGLPFAColorFloat,
- NSOpenGLPFAColorSize, 64,
- NSOpenGLPFADepthSize, 24,
- NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion4_1Core,
- 0};
+ NSOpenGLPFANoRecovery,
+ NSOpenGLPFADoubleBuffer,
+ NSOpenGLPFAClosestPolicy,
+ NSOpenGLPFAAccelerated,
+ NSOpenGLPFASampleBuffers, 0,
+ NSOpenGLPFASamples, 0,
+ NSOpenGLPFAColorFloat,
+ NSOpenGLPFAColorSize, 64,
+ NSOpenGLPFADepthSize, 24,
+ NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion4_1Core,
+ 0
+ };
NSOpenGLPixelFormat *pixelFormat = nil;
@@ -291,6 +310,7 @@ attributedStringInfo getSegments(NSAttributedString *str)
}
else
{
+ NSLog(@"pixel format created successfully for HDR Display", nil);
mHDRDisplay = YES;
}
}
@@ -324,6 +344,8 @@ attributedStringInfo getSegments(NSAttributedString *str)
self.window.colorSpace = extended_ns_color_space;
CGColorSpaceRelease(color_space_extended);
+
+ NSLog(@"Extended color space applied for HDR Display", nil);
}
//for retina support
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 297ef0e011..c77907b0dd 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -14384,7 +14384,7 @@
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <integer>1.5</integer>
+ <integer>1.0</integer>
</map>
<key>MPHDRGamma</key>
<map>
@@ -14406,7 +14406,7 @@
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <integer>1.5</integer>
+ <integer>1.0</integer>
</map>
<key>MPColorPrecision</key>
<map>
diff --git a/indra/newview/app_settings/shaders/class1/effects/bloomExtractF.glsl b/indra/newview/app_settings/shaders/class1/effects/bloomExtractF.glsl
index d878ab053e..66d86eec1f 100644
--- a/indra/newview/app_settings/shaders/class1/effects/bloomExtractF.glsl
+++ b/indra/newview/app_settings/shaders/class1/effects/bloomExtractF.glsl
@@ -2,7 +2,7 @@ out vec4 frag_color;
uniform sampler2D diffuseMap;
uniform sampler2D bloomExtractORM; // orm
-uniform sampler2D bloomExtractEmissive; // emissive
+//uniform sampler2D bloomExtractEmissive; // emissive
uniform sampler2D bloomExtractEmissive2; // emissive 2
uniform float bloomExtractBrightness = 0.9;
@@ -15,6 +15,12 @@ void main()
{
vec4 col = texture(diffuseMap, vary_texcoord0.xy);
+ if(col.a > 0.001)
+ {
+ discard;
+ return;
+ }
+
//int valid = 0;
//float brightness = dot(col.rgb, vec3(0.2126, 0.7152, 0.0722));
float brightness = dot(col.rgb, vec3(0.3, 0.5, 0.2));
@@ -25,14 +31,16 @@ void main()
return;
}
+ /*
vec3 emi = texture(bloomExtractEmissive, vary_texcoord0.xy).rgb;
if(emi.r + emi.g + emi.b > 0.01)
{
discard;
return;
}
+ */
- emi = texture(bloomExtractEmissive2, vary_texcoord0.xy).rgb;
+ vec3 emi = texture(bloomExtractEmissive2, vary_texcoord0.xy).rgb;
if(emi.r + emi.g + emi.b > 0.01)
{
discard;
diff --git a/indra/newview/app_settings/shaders/class1/interface/uiF.glsl b/indra/newview/app_settings/shaders/class1/interface/uiF.glsl
index 42cc333829..6120dbd37e 100644
--- a/indra/newview/app_settings/shaders/class1/interface/uiF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/uiF.glsl
@@ -27,12 +27,11 @@ out vec4 frag_color;
uniform sampler2D diffuseMap;
-uniform float mpHDRBoost = 1.0;
in vec2 vary_texcoord0;
in vec4 vertex_color;
void main()
{
- frag_color = mpHDRBoost * vertex_color*texture(diffuseMap, vary_texcoord0.xy);
+ frag_color = vertex_color*texture(diffuseMap, vary_texcoord0.xy);
}
diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp
index 33325e352f..984f8ee25e 100644
--- a/indra/newview/lldynamictexture.cpp
+++ b/indra/newview/lldynamictexture.cpp
@@ -204,7 +204,7 @@ bool LLViewerDynamicTexture::updateAllInstances()
llassert(bake_target.getHeight() >= (U32) LLAvatarAppearanceDefines::SCRATCH_TEX_HEIGHT);
preview_target.bindTarget();
- preview_target.clear();
+ //preview_target.clear();
LLGLSLShader::unbind();
LLVertexBuffer::unbind();
@@ -249,7 +249,7 @@ bool LLViewerDynamicTexture::updateAllInstances()
// ORDER_LAST is baked skin preview, ORDER_RESET resets appearance parameters and does not render.
bake_target.bindTarget();
- bake_target.clear();
+ //bake_target.clear();
result = false;
ret = false;
diff --git a/indra/newview/llreflectionmapmanager.cpp b/indra/newview/llreflectionmapmanager.cpp
index 68a849714c..9b801a3065 100644
--- a/indra/newview/llreflectionmapmanager.cpp
+++ b/indra/newview/llreflectionmapmanager.cpp
@@ -223,12 +223,11 @@ void LLReflectionMapManager::update()
resume();
}
- static LLCachedControl<S32> sDetail(gSavedSettings, "RenderReflectionProbeDetail", -1);
- static LLCachedControl<S32> sLevel(gSavedSettings, "RenderReflectionProbeLevel", 3);
- static LLCachedControl<U32> sReflectionProbeCount(gSavedSettings, "RenderReflectionProbeCount", 256U);
- static LLCachedControl<S32> sProbeDynamicAllocation(gSavedSettings, "RenderReflectionProbeDynamicAllocation", -1);
-
- static LLCachedControl<F32> sProbeUpdateSlowDown(gSavedSettings, "MPRenderProbeSlowDown", 0.f);
+ S32 sDetail = gSavedSettings.getS32("RenderReflectionProbeDetail");
+ S32 sLevel = gSavedSettings.getS32("RenderReflectionProbeLevel");
+ U32 sReflectionProbeCount = gSavedSettings.getU32("RenderReflectionProbeCount");
+ S32 sProbeDynamicAllocation = gSavedSettings.getS32("RenderReflectionProbeDynamicAllocation");
+ F32 sProbeUpdateSlowDown = gSavedSettings.getF32("MPRenderProbeSlowDown");
bool realtime = sDetail >= (S32)LLReflectionMapManager::DetailLevel::REALTIME;
@@ -293,11 +292,12 @@ void LLReflectionMapManager::update()
initReflectionMaps();
- static LLCachedControl<bool> render_hdr(gSavedSettings, "RenderHDREnabled", true);
+ bool render_hdr = gSavedSettings.getBOOL("RenderHDREnabled");
U32 color_fmt = render_hdr ? GL_R11F_G11F_B10F : GL_RGB8;
- static LLCachedControl<U32> MPColorPrecision(gSavedSettings, "MPColorPrecision", 0);
+ U32 MPColorPrecision = gSavedSettings.getU32("MPColorPrecision");
+
if(MPColorPrecision == 1)
{
color_fmt = GL_RGB8;
@@ -413,8 +413,8 @@ void LLReflectionMapManager::update()
mResetFade = llmin((F32)(mResetFade + gFrameIntervalSeconds * 2.f), 1.f);
- static LLCachedControl<F32> sDefaultUpdatePeriod(gSavedSettings, "RenderDefaultProbeUpdatePeriod", 2.f);
- static LLCachedControl<F32> sMPUpdatePeriod(gSavedSettings, "MPRenderProbeUpdatePeriod", 2.f);
+ F32 sDefaultUpdatePeriod = gSavedSettings.getF32("RenderDefaultProbeUpdatePeriod");
+ //F32 sMPUpdatePeriod = gSavedSettings.getF32("MPRenderProbeUpdatePeriod");
for (unsigned int i = 0; i < mProbes.size(); ++i)
{
@@ -564,15 +564,6 @@ void LLReflectionMapManager::update()
sUpdateCount++;
mUpdatingProbe = probe;
- if(probe->mCompletedCount < 2)
- {
- probe->mNextUpdateTime = gFrameTimeSeconds + fmax( ((F32)sMPUpdatePeriod / 2.0), 0.25);
- }
- else
- {
- probe->mNextUpdateTime = gFrameTimeSeconds + fmax( (F32)sMPUpdatePeriod, 0.25);
- }
-
doProbeUpdate();
}
}
@@ -782,26 +773,14 @@ void LLReflectionMapManager::doProbeUpdate()
LL_PROFILE_ZONE_SCOPED_CATEGORY_DISPLAY;
llassert(mUpdatingProbe != nullptr);
- static LLCachedControl<bool> mp_progressive(gSavedSettings, "MPRenderProbeProgressive", false);
-
if(mUpdatingFace < 6)
{
- updateProbeFace(mUpdatingProbe, mUpdatingFace, mp_progressive);
- }
- else if(mp_progressive)
- {
- if(isRadiancePass())
- {
- //updateProbeRadiance(mUpdatingProbe);
- }
- else updateProbeIrradiance(mUpdatingProbe);
+ LL_WARNS() << "updating face " << mUpdatingFace << LL_ENDL;
+ updateProbeFace(mUpdatingProbe, mUpdatingFace);
}
else
{
- if(isRadiancePass())
- {
- updateProbeRadiance(mUpdatingProbe);
- }
+ if(isRadiancePass()) updateProbeRadiance(mUpdatingProbe);
else updateProbeIrradiance(mUpdatingProbe);
}
@@ -820,8 +799,23 @@ void LLReflectionMapManager::doProbeUpdate()
if (isRadiancePass())
{
+ F32 sMPUpdatePeriod = gSavedSettings.getF32("MPRenderProbeUpdatePeriod");
+
mUpdatingProbe->mComplete = true;
mUpdatingProbe->mCompletedCount++;
+
+ LL_WARNS() << "Probe updated (" << mUpdatingProbe->mCompletedCount << ")" << LL_ENDL;
+
+ if(mUpdatingProbe->mCompletedCount < 5)
+ {
+ //probe->mNextUpdateTime = gFrameTimeSeconds + fmax( ((F32)sMPUpdatePeriod / 2.0), 0.25);
+ mUpdatingProbe->mNextUpdateTime = gFrameTimeSeconds + 1.0;
+ }
+ else
+ {
+ mUpdatingProbe->mNextUpdateTime = gFrameTimeSeconds + fmax( (F32)sMPUpdatePeriod, 0.10);
+ }
+
mUpdatingProbe = nullptr;
mRadiancePass = false;
}
@@ -849,13 +843,14 @@ void LLReflectionMapManager::doProbeUpdate()
// The next six passes render the scene with both radiance and irradiance into the same scratch space cube map and generate a simple mip chain.
// At the end of these passes, a radiance map is generated for this probe and placed into the radiance cube map array at the index for this probe.
// In effect this simulates single-bounce lighting.
-void LLReflectionMapManager::updateProbeFace(LLReflectionMap* probe, U32 face, bool progressive)
+void LLReflectionMapManager::updateProbeFace(LLReflectionMap* probe, U32 face)
{
// hacky hot-swap of camera specific render targets
gPipeline.mRT = &gPipeline.mAuxillaryRT;
mLightScale = 1.f;
- static LLCachedControl<F32> max_local_light_ambiance(gSavedSettings, "RenderReflectionProbeMaxLocalLightAmbiance", 8.f);
+ F32 max_local_light_ambiance = gSavedSettings.getF32("RenderReflectionProbeMaxLocalLightAmbiance");
+
if (!isRadiancePass() && probe->getAmbiance() > max_local_light_ambiance)
{
mLightScale = max_local_light_ambiance / probe->getAmbiance();
@@ -996,14 +991,6 @@ void LLReflectionMapManager::updateProbeFace(LLReflectionMap* probe, U32 face, b
gGL.getTexUnit(diffuseChannel)->unbind(LLTexUnit::TT_TEXTURE);
gReflectionMipProgram.unbind();
}
-
- if(progressive)
- {
- if(isRadiancePass()) updateProbeRadianceOnFace(probe, face, sourceIdx);
- }
-
- // if(isRadiancePass()) updateProbeRadianceOnFace(probe, face, sourceIdx);
- //else updateProbeIrradianceOnFace(probe, face, sourceIdx);
}
// ===================== IRRADIANCE ================================
@@ -1032,7 +1019,7 @@ void LLReflectionMapManager::updateProbeIrradiance(LLReflectionMap* probe)
mMipChain[0].bindTarget("irradiance", 0);
- mMipChain[0].clear(0);
+ mMipChain[0].clear();
gIrradianceGenProgram.bind();
@@ -1128,7 +1115,6 @@ void LLReflectionMapManager::updateProbeRadiance(LLReflectionMap* probe)
{
glViewport(0, 0, res, res);
-
gRadianceGenProgram.uniform1f(sMipLevel, (GLfloat)i);
gRadianceGenProgram.uniform1f(sRoughness, (F32)i / (F32)(mMipChain.size() - 1));
@@ -1158,136 +1144,6 @@ void LLReflectionMapManager::updateProbeRadiance(LLReflectionMap* probe)
//mTexture->unbind();
}
-// ================== PER FACE =======================
-
-void LLReflectionMapManager::updateProbeIrradianceOnFace(LLReflectionMap* probe, U32 face, S32 sourceIdx)
-{
- LL_PROFILE_GPU_ZONE("probe irradiance gen");
-
- static LLStaticHashedString sMipLevel("mipLevel");
- static LLStaticHashedString sRoughness("roughness");
- static LLStaticHashedString sWidth("u_width");
-
- gGL.setColorMask(true, false);
- LLGLDepthTest depth(GL_FALSE, GL_FALSE);
- LLGLDisable cull(GL_CULL_FACE);
- LLGLDisable blend(GL_BLEND);
-
- static LLStaticHashedString sSourceIdx("sourceIdx");
-
- //LL_WARNS() << "IRRADIANCE" << LL_ENDL;
-
- mMipChain[0].bindTarget("irradiance", 0);
- //mMipChain[0].clear();
-
- gIrradianceGenProgram.bind();
-
- S32 channel = gIrradianceGenProgram.enableTexture(LLShaderMgr::REFLECTION_PROBES, LLTexUnit::TT_CUBE_MAP_ARRAY);
- mTexture->bind(channel);
-
- gIrradianceGenProgram.uniform1i(sSourceIdx, sourceIdx);
- gIrradianceGenProgram.uniform1f(LLShaderMgr::REFLECTION_PROBE_MAX_LOD, mMaxProbeLOD);
-
- mVertexBuffer->setBuffer();
-
- int start_mip = 0;
- // find the mip target to start with based on irradiance map resolution
- for (start_mip = 0; start_mip < mMipChain.size(); ++start_mip)
- {
- if (mMipChain[start_mip].getWidth() == LL_IRRADIANCE_MAP_RESOLUTION)
- {
- break;
- }
- }
-
- int i = start_mip;
- glViewport(0, 0, mMipChain[i].getWidth(), mMipChain[i].getHeight());
-
- int cf = face;
- {
- LLCoordFrame frame;
- frame.lookAt(LLVector3(0, 0, 0), LLCubeMapArray::sClipToCubeLookVecs[cf], LLCubeMapArray::sClipToCubeUpVecs[cf]);
-
- F32 mat[16];
- frame.getOpenGLRotation(mat);
- gGL.loadMatrix(mat);
-
- mVertexBuffer->drawArrays(gGL.TRIANGLE_STRIP, 0, 4);
-
- S32 res = mMipChain[i].getWidth();
- mIrradianceMaps->bind(channel);
- glCopyTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, i - start_mip, 0, 0, probe->mCubeIndex * 6 + cf, 0, 0, res, res);
- }
-
- mMipChain[0].flush();
- gIrradianceGenProgram.unbind();
- mTexture->unbind();
-}
-
-void LLReflectionMapManager::updateProbeRadianceOnFace(LLReflectionMap* probe, U32 face, S32 sourceIdx)
-{
- LL_PROFILE_GPU_ZONE("probe radiance gen");
- static LLStaticHashedString sMipLevel("mipLevel");
- static LLStaticHashedString sRoughness("roughness");
- static LLStaticHashedString sWidth("u_width");
-
- gGL.setColorMask(true, false);
- LLGLDepthTest depth(GL_FALSE, GL_FALSE);
- LLGLDisable cull(GL_CULL_FACE);
- LLGLDisable blend(GL_BLEND);
-
- static LLStaticHashedString sSourceIdx("sourceIdx");
-
- mMipChain[0].bindTarget("radiance", 0);
- mMipChain[0].clear(0);
-
- gRadianceGenProgram.bind();
- mVertexBuffer->setBuffer();
-
- S32 channel = gRadianceGenProgram.enableTexture(LLShaderMgr::REFLECTION_PROBES, LLTexUnit::TT_CUBE_MAP_ARRAY);
- mTexture->bind(channel);
-
- gRadianceGenProgram.uniform1i(sSourceIdx, sourceIdx);
- gRadianceGenProgram.uniform1f(LLShaderMgr::REFLECTION_PROBE_MAX_LOD, mMaxProbeLOD);
- gRadianceGenProgram.uniform1f(LLShaderMgr::REFLECTION_PROBE_STRENGTH, 1.f);
- gRadianceGenProgram.uniform1i(sWidth, mProbeResolution);
-
- U32 res = mMipChain[0].getWidth();
-
- for (int i = 0; i < mMipChain.size(); ++i)
- {
- glViewport(0, 0, res, res);
-
- gRadianceGenProgram.uniform1f(sMipLevel, (GLfloat)i);
- gRadianceGenProgram.uniform1f(sRoughness, (F32)i / (F32)(mMipChain.size() - 1));
-
- int cf = face;
- {
- LLCoordFrame frame;
- frame.lookAt(LLVector3(0, 0, 0), LLCubeMapArray::sClipToCubeLookVecs[cf], LLCubeMapArray::sClipToCubeUpVecs[cf]);
-
- F32 mat[16];
- frame.getOpenGLRotation(mat);
- gGL.loadMatrix(mat);
-
- mVertexBuffer->drawArrays(gGL.TRIANGLE_STRIP, 0, 4);
-
- glCopyTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, i, 0, 0, probe->mCubeIndex * 6 + cf, 0, 0, res, res);
- LOG_GLERROR("glCopyTexSubImage3D");
- //mMipChain[0].clear(0);
- }
-
- if (i != mMipChain.size() - 1)
- {
- res /= 2;
- }
- }
-
- gRadianceGenProgram.unbind();
- mMipChain[0].flush();
- mTexture->unbind();
-}
-
void LLReflectionMapManager::reset()
{
mReset = true;
@@ -1387,7 +1243,7 @@ void LLReflectionMapManager::updateUniforms()
LLEnvironment& environment = LLEnvironment::instance();
LLSettingsSky::ptr_t psky = environment.getCurrentSky();
- static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", false);
+ bool should_auto_adjust = gSavedSettings.getBOOL("RenderSkyAutoAdjustLegacy");
F32 minimum_ambiance = psky->getReflectionProbeAmbiance(should_auto_adjust);
@@ -1704,8 +1560,8 @@ void LLReflectionMapManager::renderDebug()
void LLReflectionMapManager::initReflectionMaps()
{
- static LLCachedControl<U32> ref_probe_res(gSavedSettings, "RenderReflectionProbeResolution", 128U);
- U32 probe_resolution = nhpo2(llclamp(ref_probe_res(), (U32)64, (U32)512));
+ U32 ref_probe_res = gSavedSettings.getU32("RenderReflectionProbeResolution");
+ U32 probe_resolution = nhpo2(llclamp(ref_probe_res, (U32)64, (U32)512));
bool shouldInit = mTexture.isNull() || mReflectionProbeCount != mDynamicProbeCount || mProbeResolution != probe_resolution || mReset;
@@ -1729,7 +1585,7 @@ void LLReflectionMapManager::initReflectionMaps()
mTexture->getWidth() != mProbeResolution ||
mReflectionProbeCount + 2 != mTexture->getCount())
{
- static LLCachedControl<bool> render_hdr(gSavedSettings, "RenderHDREnabled", true);
+ bool render_hdr = gSavedSettings.getBOOL("RenderHDREnabled");
if (mTexture)
{
diff --git a/indra/newview/llreflectionmapmanager.h b/indra/newview/llreflectionmapmanager.h
index b874bb1c17..c12a87cade 100644
--- a/indra/newview/llreflectionmapmanager.h
+++ b/indra/newview/llreflectionmapmanager.h
@@ -210,15 +210,11 @@ private:
void doProbeUpdate();
// update the specified face of the specified probe
- void updateProbeFace(LLReflectionMap* probe, U32 face, bool progressive = false);
+ void updateProbeFace(LLReflectionMap* probe, U32 face);
void updateProbeIrradiance(LLReflectionMap* probe);
void updateProbeRadiance(LLReflectionMap* probe);
- void updateProbeIrradianceOnFace(LLReflectionMap* probe, U32 face, S32 sourceIdx);
- void updateProbeRadianceOnFace(LLReflectionMap* probe, U32 face, S32 sourceIdx);
-
-
// list of active reflection maps
std::vector<LLPointer<LLReflectionMap> > mProbes;
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index bd1fc46f5d..579583d825 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -1690,9 +1690,6 @@ void render_ui_3d()
gUIProgram.bind();
gGL.color4f(1.f, 1.f, 1.f, 1.f);
- static LLCachedControl<bool> hdrDisplay(gSavedSettings, "MPHDRDisplay");
- static LLCachedControl<F32> hdrUIBoost(gSavedSettings, "MPHDRUIBoost");
- if(hdrDisplay) gUIProgram.uniform1f(LLShaderMgr::MP_HDR_BOOST, (GLfloat)hdrUIBoost);
// Coordinate axes
static LLCachedControl<bool> show_axes(gSavedSettings, "ShowAxes");
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 82246b564c..7f7275c8d1 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -5039,7 +5039,7 @@ bool LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
mWorldViewRectRaw.set(0, image_height, image_width, 0);
LLViewerCamera::getInstance()->setViewHeightInPixels( mWorldViewRectRaw.getHeight() );
LLViewerCamera::getInstance()->setAspect( getWorldViewAspectRatio() );
- scratch_space.bindTarget("", 0);
+ scratch_space.bindTarget();
}
else
{
@@ -5306,7 +5306,7 @@ bool LLViewerWindow::simpleSnapshot(LLImageRaw* raw, S32 image_width, S32 image_
{
mWorldViewRectRaw.set(0, image_height, image_width, 0);
- scratch_space.bindTarget("", 0);
+ scratch_space.bindTarget();
}
else
{
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 996221fdba..fef1128a1f 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -356,14 +356,12 @@ bool addDeferredAttachments(LLRenderTarget& target, bool for_impostor = false)
static LLCachedControl<bool> has_emissive(gSavedSettings, "RenderEnableEmissiveBuffer", false);
static LLCachedControl<bool> has_hdr(gSavedSettings, "RenderHDREnabled", true);
static LLCachedControl<U32> MPColorPrecision(gSavedSettings, "MPColorPrecision", 0);
+ static LLCachedControl<bool> MPHDRDisplay(gSavedSettings, "MPHDRDisplay", false);
bool hdr = has_hdr() && gGLManager.mGLVersion > 4.05f;
- if (!hdr || MPColorPrecision < 2)
- {
- norm = GL_RGB10_A2;
- emissive = GL_RGB8;
- }
+ if (!hdr || MPColorPrecision != 2) norm = GL_RGB10_A2;
+ if (!hdr || (!MPHDRDisplay && MPColorPrecision == 1)) emissive = GL_RGB8;
bool valid = true;
valid = valid && target.addColorAttachment(orm); // frag-data[1] specular OR PBR ORM
@@ -874,15 +872,15 @@ bool LLPipeline::allocateScreenBufferInternal(U32 resX, U32 resY, U32 type_)
//allocate deferred rendering color buffers
GLuint deferredScreenFormat = GL_RGBA8;
- if((hdr || mHDRDisplay) && MPColorPrecision == 2) deferredScreenFormat = GL_RGBA16F;
+ if((hdr && MPColorPrecision == 2)) deferredScreenFormat = GL_RGBA16F;
if (!mRT->deferredScreen.allocate(resX, resY, deferredScreenFormat, true)) return false;
if (!addDeferredAttachments(mRT->deferredScreen)) return false;
- GLuint screenFormat = GL_RGBA8;
- if(hdr || mHDRDisplay) screenFormat = GL_RGBA16F;
+ GLuint screenFormat = GL_RGBA16F;
+ if(!hdr && !mHDRDisplay && MPColorPrecision == 1) screenFormat = GL_RGB8;
- if (!mRT->screen.allocate(resX, resY, GL_RGBA16F)) return false;
+ if (!mRT->screen.allocate(resX, resY, screenFormat)) return false;
mRT->deferredScreen.shareDepthBuffer(mRT->screen);
@@ -901,7 +899,7 @@ bool LLPipeline::allocateScreenBufferInternal(U32 resX, U32 resY, U32 type_)
if (!gCubeSnapshot) // hack to not re-allocate various targets for cube snapshots
{
GLuint UIFormat = GL_RGBA8;
- if(mHDRDisplay && MPColorPrecision == 2) UIFormat = GL_RGBA16F;
+ //if(mHDRDisplay && MPColorPrecision == 2) UIFormat = GL_RGBA16F;
if (RenderUIBuffer)
{
@@ -914,7 +912,15 @@ bool LLPipeline::allocateScreenBufferInternal(U32 resX, U32 resY, U32 type_)
if (RenderFSAAType > 0)
{
GLuint AAFormat = GL_RGBA8;
- if(mHDRDisplay && MPColorPrecision == 2) AAFormat = GL_RGBA16F;
+ if(mHDRDisplay && MPColorPrecision == 2)
+ {
+ LL_WARNS() << "AA SET TO GL_RGBA16F" << LL_ENDL;
+ AAFormat = GL_RGBA16F;
+ }
+ else
+ {
+ LL_WARNS() << "AA SET TO GL_RGBA8" << LL_ENDL;
+ }
if (!mFXAAMap.allocate(resX, resY, AAFormat)) return false;
if (RenderFSAAType == 2)
@@ -3891,9 +3897,6 @@ void render_hud_elements()
gGL.color4f(1, 1, 1, 1);
LLGLDepthTest depth(GL_TRUE, GL_FALSE);
- static LLCachedControl<bool> HDRDisplay(gSavedSettings, "MPHDRDisplay");
- static LLCachedControl<F32> hdrUIBoost(gSavedSettings, "MPHDRUIBoost");
- if(HDRDisplay) gUIProgram.uniform1f(LLShaderMgr::MP_HDR_BOOST, (GLfloat)hdrUIBoost);
if (!LLPipeline::sReflectionRender && gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
{
@@ -7363,7 +7366,7 @@ void LLPipeline::gammaCorrect(LLRenderTarget* src, LLRenderTarget* dst)
if(mHDRDisplay)
{
shader.uniform1f(LLShaderMgr::GAMMA, (GLfloat)mp_hdr_gamma);
- shader.uniform1f(LLShaderMgr::MP_HDR_BOOST, (GLfloat)mp_hdr_boost);
+ shader.uniform1f(LLShaderMgr::MP_HDR_BOOST, 1.0);
}
renderTriangle();
@@ -7682,14 +7685,14 @@ void LLPipeline::generateSMAABuffers(LLRenderTarget* src)
edge_shader.bind();
edge_shader.uniform4fv(sSmaaRTMetrics, 1, rt_metrics);
- S32 channel = edge_shader.enableTexture(LLShaderMgr::DEFERRED_DIFFUSE, src->getUsage());
+ S32 channel = edge_shader.enableTexture(LLShaderMgr::DEFERRED_DIFFUSE);
+
if (channel > -1)
{
if (!use_sample)
{
- //src->bindTexture(0, channel, LLTexUnit::TFO_POINT);
- //gGL.getTexUnit(channel)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
src->bindTexture(0, channel, LLTexUnit::TFO_BILINEAR);
+ gGL.getTexUnit(channel)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
}
else
{
@@ -7787,7 +7790,6 @@ bool LLPipeline::applySMAA(LLRenderTarget* src, LLRenderTarget* dst)
LL_PROFILE_GPU_ZONE("aa");
- generateSMAABuffers(src);
static LLCachedControl<U32> aa_quality(gSavedSettings, "RenderFSAASamples", 0U);
@@ -8094,7 +8096,7 @@ bool LLPipeline::renderBloom(LLRenderTarget* src, LLRenderTarget* dst)
gBloomExtractProgram.bind();
gBloomExtractProgram.bindTexture(LLShaderMgr::DIFFUSE_MAP, &mRT->screen);
gBloomExtractProgram.bindTexture(LLShaderMgr::BLOOM_EXTRACT_ORM, &mRT->deferredScreen, false, LLTexUnit::TFO_POINT, 1);
- gBloomExtractProgram.bindTexture(LLShaderMgr::BLOOM_EXTRACT_EMISSIVE, &mGlow[1], false, LLTexUnit::TFO_POINT, 0);
+ //gBloomExtractProgram.bindTexture(LLShaderMgr::BLOOM_EXTRACT_EMISSIVE, &mGlow[1], false, LLTexUnit::TFO_POINT, 0);
gBloomExtractProgram.bindTexture(LLShaderMgr::BLOOM_EXTRACT_EMISSIVE2, &mRT->deferredScreen, false, LLTexUnit::TFO_POINT, 3);
gBloomExtractProgram.uniform1f(LLShaderMgr::BLOOM_EXTRACT_BRIGHTNESS, 1.0 - mp_bloom_extract_brightness);
@@ -8217,6 +8219,8 @@ void LLPipeline::renderFinalize()
LLRenderTarget* postHDRBuffer = &mRT->screen;
+ generateSMAABuffers(&mRT->screen);
+
if (hdr)
{
copyScreenSpaceReflections(&mRT->screen, &mSceneMap);
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics3.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics3.xml
index ddc00915a5..c7a1959853 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics3.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics3.xml
@@ -1721,8 +1721,8 @@ height="16"
left_delta="150"
top_delta="-1"
initial_value="1.0"
-increment="0.1"
-min_val="0.8"
+increment="0.05"
+min_val="0.75"
max_val="2.0"
decimal_digits="2"
label_width="2">
@@ -1752,7 +1752,7 @@ Advanced settings:
<check_box
name="MultiTexCtrl"
control_name="RenderGLMultiThreadedTextures"
-label="Multithreaded Textures"
+label="Multithreaded Textures (needs restart)"
layout="topleft"
width="400"
height="16"
@@ -1764,8 +1764,8 @@ initial_value="false"
<icon
name="mp_multitex_bullet"
-tool_tip="Improves textures loading performance on certain hardware. But can be unstable."
-image_name="mp_yellow_bullet"
+tool_tip="Improves textures loading performance on certain hardware. But can be unstable!! Don't enable this on Linux and don't use it with Apple Multithreaded OpenGL activated."
+image_name="mp_red_bullet"
follows="left|top"
width="16"
height="16"
@@ -1776,7 +1776,7 @@ top_delta="-2"
<icon
name="mp_multitex_info_bullet"
-tool_tip="Enables loading textures using multiple threads."
+tool_tip="Enables loading textures using multiple threads. Use with extreme caution! it's unstable."
image_name="mp_info_bullet"
follows="left|top"
width="16"
@@ -1873,7 +1873,7 @@ top_delta="-2"
<icon
name="mp_lowcolor_info_bullet"
-tool_tip="Sets the internal color resolution. Improves the speed or quality."
+tool_tip="Sets the internal color resolution. Influences the speed or quality. Set this to high if you want to use HDR Display."
image_name="mp_info_bullet"
follows="left|top"
width="16"
@@ -1924,9 +1924,9 @@ Warning: HDR shows extreme luminosity contrast. Use carefully!
<check_box
name="HDRDisplayCtrl"
control_name="MPHDRDisplay"
-label="HDR Display (Mac)"
+label="HDR Display (Mac) - needs restart"
layout="topleft"
-width="250"
+width="400"
height="16"
left="20"
top_delta="32"
@@ -1934,6 +1934,30 @@ initial_value="true"
>
</check_box>
+<icon
+name="mp_hdrd2_bullet"
+tool_tip="Medium performance impact"
+image_name="mp_yellow_bullet"
+follows="left|top"
+width="16"
+height="16"
+layout="topleft"
+left_pad="5"
+top_delta="-2"
+/>
+
+<icon
+name="mp_hdrd2_info_bullet"
+tool_tip="Make sure your color profile is Apple XDR"
+image_name="mp_info_bullet"
+follows="left|top"
+width="16"
+height="16"
+layout="topleft"
+left_pad="5"
+top_delta="0"
+/>
+
<text
name="mp_hdrd_gamma_lbl"
follows="left|top"
@@ -1964,35 +1988,6 @@ label_width="2">
</slider>
<text
-name="mp_hdrd_uiboost_lbl"
-follows="left|top"
-layout="topleft"
-width="140"
-height="18"
-left="32"
-top_pad="16"
-font="SansSerifSmall"
->
-UI Luminosity Boost
-</text>
-
-<slider
-control_name="MPHDRUIBoost"
-follows="left|top"
-layout="topleft"
-width="200"
-height="16"
-left_delta="150"
-top_delta="-1"
-initial_value="1.0"
-increment="0.1"
-min_val="1.0"
-max_val="1.4"
-decimal_digits="2"
-label_width="2">
-</slider>
-
-<text
follows="left|top"
layout="topleft"
top_pad="30"
@@ -2045,7 +2040,7 @@ top_delta="0"
<check_box
name="MPAppleVBModeCtrl"
control_name="MPVertexBufferMode"
-label="Megapahit Vertex Buffer Mode (needs restart)"
+label="Alternative Vertex Buffer Mode (needs restart)"
layout="topleft"
width="400"
height="16"