From bb44f3dcd930e777947bd493bfc8a27852a42b0c Mon Sep 17 00:00:00 2001 From: Rachael Alexanderson Date: Wed, 20 Oct 2021 06:49:45 -0400 Subject: [PATCH] - add cvar `r_skipmats` - speeds up rendering on slower cards for mods that use a lot of specularity/pbr, effective on both the opengl and vulkan backends --- src/common/rendering/gl/gl_shader.cpp | 5 +++++ src/common/rendering/v_video.cpp | 2 ++ src/common/rendering/vulkan/renderer/vk_renderstate.cpp | 3 +++ 3 files changed, 10 insertions(+) diff --git a/src/common/rendering/gl/gl_shader.cpp b/src/common/rendering/gl/gl_shader.cpp index 2ef56a288..60c5677a6 100644 --- a/src/common/rendering/gl/gl_shader.cpp +++ b/src/common/rendering/gl/gl_shader.cpp @@ -49,6 +49,8 @@ #include #include +EXTERN_CVAR(Bool, r_skipmats) + namespace OpenGLRenderer { @@ -729,6 +731,9 @@ FShader *FShaderManager::BindEffect(int effect, EPassType passType) FShader *FShaderManager::Get(unsigned int eff, bool alphateston, EPassType passType) { + if (r_skipmats && eff >= 3 && eff <= 4) + eff = 0; + if (passType < mPassShaders.Size()) return mPassShaders[passType]->Get(eff, alphateston); else diff --git a/src/common/rendering/v_video.cpp b/src/common/rendering/v_video.cpp index 0d00c4c2e..047894466 100644 --- a/src/common/rendering/v_video.cpp +++ b/src/common/rendering/v_video.cpp @@ -72,6 +72,8 @@ CVAR(Int, win_w, -1, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) CVAR(Int, win_h, -1, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) CVAR(Bool, win_maximized, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) +CVAR(Bool, r_skipmats, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) + // 0 means 'no pipelining' for non GLES2 and 4 elements for GLES2 CUSTOM_CVAR(Int, gl_pipeline_depth, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) { diff --git a/src/common/rendering/vulkan/renderer/vk_renderstate.cpp b/src/common/rendering/vulkan/renderer/vk_renderstate.cpp index d8314405d..a2df4a28e 100644 --- a/src/common/rendering/vulkan/renderer/vk_renderstate.cpp +++ b/src/common/rendering/vulkan/renderer/vk_renderstate.cpp @@ -37,6 +37,7 @@ #include "hwrenderer/data/shaderuniforms.h" CVAR(Int, vk_submit_size, 1000, 0); +EXTERN_CVAR(Bool, r_skipmats) VkRenderState::VkRenderState() { @@ -239,6 +240,8 @@ void VkRenderState::ApplyRenderPass(int dt) int effectState = mMaterial.mOverrideShader >= 0 ? mMaterial.mOverrideShader : (mMaterial.mMaterial ? mMaterial.mMaterial->GetShaderIndex() : 0); pipelineKey.SpecialEffect = EFF_NONE; pipelineKey.EffectState = mTextureEnabled ? effectState : SHADER_NoTexture; + if (r_skipmats && pipelineKey.EffectState >= 3 && pipelineKey.EffectState <= 4) + pipelineKey.EffectState = 0; pipelineKey.AlphaTest = mAlphaThreshold >= 0.f; }