Merge branch 'release/2024.12-ForeverFPS' of https://github.com/secondlife/viewer
commit
fe41087069
|
|
@ -137,7 +137,8 @@ const std::string LLSettingsSky::SETTING_REFLECTION_PROBE_AMBIANCE("reflection_p
|
|||
|
||||
const LLUUID LLSettingsSky::DEFAULT_ASSET_ID("651510b8-5f4d-8991-1592-e7eeab2a5a06");
|
||||
|
||||
F32 LLSettingsSky::sAutoAdjustProbeAmbiance = 1.f;
|
||||
const F32 LLSettingsSky::DEFAULT_AUTO_ADJUST_PROBE_AMBIANCE = 1.f;
|
||||
F32 LLSettingsSky::sAutoAdjustProbeAmbiance = DEFAULT_AUTO_ADJUST_PROBE_AMBIANCE;
|
||||
|
||||
static const LLUUID DEFAULT_SUN_ID("32bfbcea-24b1-fb9d-1ef9-48a28a63730f"); // dataserver
|
||||
static const LLUUID DEFAULT_MOON_ID("d07f6eed-b96a-47cd-b51d-400ad4a1c428"); // dataserver
|
||||
|
|
|
|||
|
|
@ -103,6 +103,7 @@ public:
|
|||
|
||||
static const LLUUID DEFAULT_ASSET_ID;
|
||||
|
||||
static const F32 DEFAULT_AUTO_ADJUST_PROBE_AMBIANCE;
|
||||
static F32 sAutoAdjustProbeAmbiance;
|
||||
|
||||
typedef PTR_NAMESPACE::shared_ptr<LLSettingsSky> ptr_t;
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ void LLCubeMapArray::allocate(U32 resolution, U32 components, U32 count, bool us
|
|||
bind(0);
|
||||
free_cur_tex_image();
|
||||
|
||||
U32 format = components == 4 ? GL_RGBA16F : GL_RGB16F;
|
||||
U32 format = components == 4 ? GL_RGBA16F : GL_R11F_G11F_B10F;
|
||||
if (!hdr)
|
||||
{
|
||||
format = components == 4 ? GL_RGBA8 : GL_RGB8;
|
||||
|
|
|
|||
|
|
@ -330,6 +330,7 @@ S32 LLImageGL::dataFormatBits(S32 dataformat)
|
|||
case GL_RGB: return 24;
|
||||
case GL_SRGB: return 24;
|
||||
case GL_RGB8: return 24;
|
||||
case GL_R11F_G11F_B10F: return 32;
|
||||
case GL_RGBA: return 32;
|
||||
case GL_RGBA8: return 32;
|
||||
case GL_RGB10_A2: return 32;
|
||||
|
|
|
|||
|
|
@ -256,7 +256,7 @@ void main()
|
|||
#endif
|
||||
|
||||
vec3 sunlit_linear = srgb_to_linear(sunlit);
|
||||
float fade = 0;
|
||||
float fade = 1;
|
||||
#ifdef TRANSPARENT_WATER
|
||||
float depth = texture(depthMap, distort).r;
|
||||
|
||||
|
|
|
|||
|
|
@ -1006,6 +1006,39 @@ private:
|
|||
};
|
||||
|
||||
|
||||
F32 shader_timer_benchmark(std::vector<LLRenderTarget> & dest, TextureHolder & texHolder, U32 textures_count, LLVertexBuffer * buff, F32 &seconds)
|
||||
{
|
||||
// run GPU timer benchmark
|
||||
|
||||
//number of samples to take
|
||||
const S32 samples = 64;
|
||||
|
||||
{
|
||||
ShaderProfileHelper initProfile;
|
||||
dest[0].bindTarget();
|
||||
gBenchmarkProgram.bind();
|
||||
for (S32 c = 0; c < samples; ++c)
|
||||
{
|
||||
for (U32 i = 0; i < textures_count; ++i)
|
||||
{
|
||||
texHolder.bind(i);
|
||||
buff->setBuffer();
|
||||
buff->drawArrays(LLRender::TRIANGLES, 0, 3);
|
||||
}
|
||||
}
|
||||
gBenchmarkProgram.unbind();
|
||||
dest[0].flush();
|
||||
}
|
||||
|
||||
F32 ms = gBenchmarkProgram.mTimeElapsed / 1000000.f;
|
||||
seconds = ms / 1000.f;
|
||||
|
||||
F64 samples_drawn = (F64)gBenchmarkProgram.mSamplesDrawn;
|
||||
F64 gpixels_drawn = samples_drawn / 1000000000.0;
|
||||
F32 samples_sec = (F32)(gpixels_drawn / seconds);
|
||||
return samples_sec * 4; // 4 bytes per sample
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// gpu_benchmark()
|
||||
// returns measured memory bandwidth of GPU in gigabytes per second
|
||||
|
|
@ -1047,9 +1080,6 @@ F32 gpu_benchmark()
|
|||
//number of textures
|
||||
const U32 count = 32;
|
||||
|
||||
//number of samples to take
|
||||
const S32 samples = 64;
|
||||
|
||||
//time limit, allocation operations shouldn't take longer then 30 seconds, same for actual benchmark.
|
||||
const F32 time_limit = 30.f;
|
||||
|
||||
|
|
@ -1139,33 +1169,15 @@ F32 gpu_benchmark()
|
|||
|
||||
LLGLSLShader::unbind();
|
||||
|
||||
// run GPU timer benchmark
|
||||
{
|
||||
ShaderProfileHelper initProfile;
|
||||
dest[0].bindTarget();
|
||||
gBenchmarkProgram.bind();
|
||||
for (S32 c = 0; c < samples; ++c)
|
||||
{
|
||||
for (U32 i = 0; i < count; ++i)
|
||||
{
|
||||
texHolder.bind(i);
|
||||
buff->setBuffer();
|
||||
buff->drawArrays(LLRender::TRIANGLES, 0, 3);
|
||||
}
|
||||
}
|
||||
gBenchmarkProgram.unbind();
|
||||
dest[0].flush();
|
||||
}
|
||||
// run GPU timer benchmark twice
|
||||
F32 seconds = 0;
|
||||
F32 gbps = shader_timer_benchmark(dest, texHolder, count, buff.get(), seconds);
|
||||
|
||||
F32 ms = gBenchmarkProgram.mTimeElapsed/1000000.f;
|
||||
F32 seconds = ms/1000.f;
|
||||
LL_INFOS("Benchmark") << "Memory bandwidth, 1st run is " << llformat("%.3f", gbps) << " GB/sec according to ARB_timer_query, total time " << seconds << " seconds" << LL_ENDL;
|
||||
|
||||
F64 samples_drawn = (F64)gBenchmarkProgram.mSamplesDrawn;
|
||||
F64 gpixels_drawn = samples_drawn / 1000000000.0;
|
||||
F32 samples_sec = (F32)(gpixels_drawn/seconds);
|
||||
F32 gbps = samples_sec*4; // 4 bytes per sample
|
||||
gbps = shader_timer_benchmark(dest, texHolder, count, buff.get(), seconds);
|
||||
|
||||
LL_INFOS("Benchmark") << "Memory bandwidth is " << llformat("%.3f", gbps) << " GB/sec according to ARB_timer_query, total time " << seconds << " seconds" << LL_ENDL;
|
||||
LL_INFOS("Benchmark") << "Memory bandwidth, final run is " << llformat("%.3f", gbps) << " GB/sec according to ARB_timer_query, total time " << seconds << " seconds" << LL_ENDL;
|
||||
|
||||
return gbps;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -227,7 +227,7 @@ void LLReflectionMapManager::update()
|
|||
|
||||
if (!mRenderTarget.isComplete())
|
||||
{
|
||||
U32 color_fmt = render_hdr ? GL_RGBA16F : GL_RGBA8;
|
||||
U32 color_fmt = render_hdr ? GL_R11F_G11F_B10F : GL_RGB8;
|
||||
U32 targetRes = mProbeResolution * 4; // super sample
|
||||
mRenderTarget.allocate(targetRes, targetRes, color_fmt, true);
|
||||
}
|
||||
|
|
@ -240,7 +240,7 @@ void LLReflectionMapManager::update()
|
|||
mMipChain.resize(count);
|
||||
for (U32 i = 0; i < count; ++i)
|
||||
{
|
||||
mMipChain[i].allocate(res, res, render_hdr ? GL_RGB16F : GL_RGB8);
|
||||
mMipChain[i].allocate(res, res, render_hdr ? GL_R11F_G11F_B10F : GL_RGB8);
|
||||
res /= 2;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -832,6 +832,10 @@ void LLSettingsVOSky::applySpecial(void *ptarget, bool force)
|
|||
{
|
||||
shader->uniform3fv(LLShaderMgr::AMBIENT, LLVector3(ambient.mV));
|
||||
shader->uniform1f(LLShaderMgr::SKY_HDR_SCALE, sqrtf(g)*2.0f); // use a modifier here so 1.0 maps to the "most desirable" default and the maximum value doesn't go off the rails
|
||||
|
||||
// Low quality setting
|
||||
if (!LLPipeline::sReflectionProbesEnabled)
|
||||
probe_ambiance = DEFAULT_AUTO_ADJUST_PROBE_AMBIANCE;
|
||||
}
|
||||
else if (psky->canAutoAdjust() && should_auto_adjust)
|
||||
{ // auto-adjust legacy sky to take advantage of probe ambiance
|
||||
|
|
|
|||
Loading…
Reference in New Issue