Skip to content

Commit 6feed6e

Browse files
author
Rye
committed
Fix ASAN complaints about load alignment and leaks as well as dead code
1 parent 8ce93b6 commit 6feed6e

File tree

9 files changed

+40
-61
lines changed

9 files changed

+40
-61
lines changed

indra/llrender/llrender.cpp

Lines changed: 16 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -71,15 +71,6 @@ bool LLRender::sGLCoreProfile = false;
7171
bool LLRender::sNsightDebugSupport = false;
7272
LLVector2 LLRender::sUIGLScaleFactor = LLVector2(1.f, 1.f);
7373

74-
struct LLVBCache
75-
{
76-
LLPointer<LLVertexBuffer> vb;
77-
std::chrono::steady_clock::time_point touched;
78-
};
79-
80-
static std::unordered_map<U64, LLVBCache> sVBCache;
81-
static thread_local std::list<LLVertexBufferData> *sBufferDataList = nullptr;
82-
8374
static const GLenum sGLTextureType[] =
8475
{
8576
GL_TEXTURE_2D,
@@ -117,7 +108,7 @@ static const GLenum sGLBlendFactor[] =
117108

118109
LLTexUnit::LLTexUnit(S32 index)
119110
: mCurrTexType(TT_NONE),
120-
mCurrColorScale(1), mCurrAlphaScale(1), mCurrTexture(0),
111+
mCurrTexture(0),
121112
mHasMipMaps(false),
122113
mIndex(index)
123114
{
@@ -615,26 +606,6 @@ GLint LLTexUnit::getTextureSourceType(eTextureBlendSrc src, bool isAlpha)
615606
}
616607
}
617608

618-
void LLTexUnit::setColorScale(S32 scale)
619-
{
620-
if (mCurrColorScale != scale || gGL.mDirty)
621-
{
622-
mCurrColorScale = scale;
623-
gGL.flush();
624-
glTexEnvi(GL_TEXTURE_ENV, GL_RGB_SCALE, scale);
625-
}
626-
}
627-
628-
void LLTexUnit::setAlphaScale(S32 scale)
629-
{
630-
if (mCurrAlphaScale != scale || gGL.mDirty)
631-
{
632-
mCurrAlphaScale = scale;
633-
gGL.flush();
634-
glTexEnvi(GL_TEXTURE_ENV, GL_ALPHA_SCALE, scale);
635-
}
636-
}
637-
638609
// Useful for debugging that you've manually assigned a texture operation to the correct
639610
// texture unit based on the currently set active texture in opengl.
640611
void LLTexUnit::debugTextureUnit(void)
@@ -810,7 +781,7 @@ void LLLightState::setSpotDirection(const LLVector3& direction)
810781
++gGL.mLightHash;
811782

812783
//transform direction by current modelview matrix
813-
glm::vec3 dir(glm::make_vec3(direction.mV));
784+
glm::vec3 dir(direction.mV[VX], direction.mV[VY], direction.mV[VZ]);
814785
const glm::mat3 mat(gGL.getModelviewMatrix());
815786
dir = mat * dir;
816787

@@ -921,7 +892,9 @@ void LLRender::initVertexBuffer()
921892

922893
void LLRender::resetVertexBuffer()
923894
{
924-
mBuffer = NULL;
895+
mBuffer = nullptr;
896+
mBufferDataList = nullptr;
897+
mVBCache.clear();
925898
}
926899

927900
void LLRender::shutdown()
@@ -1504,22 +1477,22 @@ void LLRender::clearErrors()
15041477

15051478
void LLRender::beginList(std::list<LLVertexBufferData> *list)
15061479
{
1507-
if (sBufferDataList)
1480+
if (mBufferDataList)
15081481
{
15091482
LL_ERRS() << "beginList called while another list is open." << LL_ENDL;
15101483
}
15111484

15121485
llassert(LLGLSLShader::sCurBoundShaderPtr == &gUIProgram);
15131486
flush();
1514-
sBufferDataList = list;
1487+
mBufferDataList = list;
15151488
}
15161489

15171490
void LLRender::endList()
15181491
{
1519-
if (sBufferDataList)
1492+
if (mBufferDataList)
15201493
{
15211494
flush();
1522-
sBufferDataList = nullptr;
1495+
mBufferDataList = nullptr;
15231496
}
15241497
else
15251498
{
@@ -1606,10 +1579,10 @@ void LLRender::flush()
16061579

16071580
U32 attribute_mask = LLGLSLShader::sCurBoundShaderPtr->mAttributeMask;
16081581

1609-
if (sBufferDataList)
1582+
if (mBufferDataList)
16101583
{
16111584
vb = genBuffer(attribute_mask, count);
1612-
sBufferDataList->emplace_back(
1585+
mBufferDataList->emplace_back(
16131586
vb,
16141587
mMode,
16151588
count,
@@ -1669,9 +1642,9 @@ LLVertexBuffer* LLRender::bufferfromCache(U32 attribute_mask, U32 count)
16691642
// To leverage this, we maintain a running hash of the vertex stream being
16701643
// built up before a flush, and then check that hash against a VB
16711644
// cache just before creating a vertex buffer in VRAM
1672-
std::unordered_map<U64, LLVBCache>::iterator cache = sVBCache.find(vhash);
1645+
std::unordered_map<U64, LLVBCache>::iterator cache = mVBCache.find(vhash);
16731646

1674-
if (cache != sVBCache.end())
1647+
if (cache != mVBCache.end())
16751648
{
16761649
LL_PROFILE_ZONE_NAMED_CATEGORY_VERTEX("vb cache hit");
16771650
// cache hit, just use the cached buffer
@@ -1683,7 +1656,7 @@ LLVertexBuffer* LLRender::bufferfromCache(U32 attribute_mask, U32 count)
16831656
LL_PROFILE_ZONE_NAMED_CATEGORY_VERTEX("vb cache miss");
16841657
vb = genBuffer(attribute_mask, count);
16851658

1686-
sVBCache[vhash] = { vb , std::chrono::steady_clock::now() };
1659+
mVBCache[vhash] = { vb , std::chrono::steady_clock::now() };
16871660

16881661
static U32 miss_count = 0;
16891662
miss_count++;
@@ -1695,11 +1668,11 @@ LLVertexBuffer* LLRender::bufferfromCache(U32 attribute_mask, U32 count)
16951668

16961669
using namespace std::chrono_literals;
16971670
// every 1024 misses, clean the cache of any VBs that haven't been touched in the last second
1698-
for (std::unordered_map<U64, LLVBCache>::iterator iter = sVBCache.begin(); iter != sVBCache.end(); )
1671+
for (std::unordered_map<U64, LLVBCache>::iterator iter = mVBCache.begin(); iter != mVBCache.end(); )
16991672
{
17001673
if (now - iter->second.touched > 1s)
17011674
{
1702-
iter = sVBCache.erase(iter);
1675+
iter = mVBCache.erase(iter);
17031676
}
17041677
else
17051678
{

indra/llrender/llrender.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
#include "glm/mat4x4.hpp"
4646

4747
#include <array>
48+
#include <chrono>
4849
#include <list>
4950
#include <vector>
5051

@@ -228,13 +229,9 @@ class LLTexUnit
228229
S32 mIndex;
229230
U32 mCurrTexture;
230231
eTextureType mCurrTexType;
231-
S32 mCurrColorScale;
232-
S32 mCurrAlphaScale;
233232
bool mHasMipMaps;
234233

235234
void debugTextureUnit(void);
236-
void setColorScale(S32 scale);
237-
void setAlphaScale(S32 scale);
238235
GLint getTextureSource(eTextureBlendSrc src);
239236
GLint getTextureSourceType(eTextureBlendSrc src, bool isAlpha = false);
240237
};
@@ -535,6 +532,15 @@ class LLRender
535532

536533
std::vector<LLVector4a> mUIOffset;
537534
std::vector<LLVector4a> mUIScale;
535+
536+
struct LLVBCache
537+
{
538+
LLPointer<LLVertexBuffer> vb;
539+
std::chrono::steady_clock::time_point touched;
540+
};
541+
542+
std::unordered_map<U64, LLVBCache> mVBCache;
543+
std::list<LLVertexBufferData>* mBufferDataList = nullptr;
538544
};
539545

540546
extern F32 gGLModelView[16];

indra/newview/llhudrender.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ void hud_render_text(const LLWString &wstr, const LLVector3 &pos_agent,
109109
LLRect world_view_rect = gViewerWindow->getWorldViewRectRaw();
110110
glm::ivec4 viewport(world_view_rect.mLeft, world_view_rect.mBottom, world_view_rect.getWidth(), world_view_rect.getHeight());
111111

112-
glm::vec3 win_coord = glm::project(glm::make_vec3(LLVector4(render_pos).mV), get_current_modelview(), get_current_projection(), viewport);
112+
glm::vec3 win_coord = glm::project(glm::vec3(render_pos.mV[VX], render_pos.mV[VY], render_pos.mV[VZ]), get_current_modelview(), get_current_projection(), viewport);
113113

114114
//fonts all render orthographically, set up projection``
115115
gGL.matrixMode(LLRender::MM_PROJECTION);

indra/newview/llpanelprimmediacontrols.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,7 @@ void LLPanelPrimMediaControls::updateShape()
660660
for(; vert_it != vert_end; ++vert_it)
661661
{
662662
// project silhouette vertices into screen space
663-
glm::vec3 screen_vert(glm::make_vec3(vert_it->mV));
663+
glm::vec3 screen_vert(vert_it->mV[VX], vert_it->mV[VY], vert_it->mV[VZ]);
664664
screen_vert = mul_mat4_vec3(mat, screen_vert);
665665

666666
// add to screenspace bounding box

indra/newview/llreflectionmap.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ bool LLReflectionMap::getBox(LLMatrix4& box)
256256
glm::mat4 mv(get_current_modelview());
257257
LLVector3 s = mViewerObject->getScale().scaledVec(LLVector3(0.5f, 0.5f, 0.5f));
258258
mRadius = s.magVec();
259-
glm::mat4 scale = glm::scale(glm::make_vec3(LLVector4(s).mV));
259+
glm::mat4 scale = glm::scale(glm::vec3(s.mV[VX], s.mV[VY], s.mV[VZ]));
260260
if (mViewerObject->mDrawable != nullptr)
261261
{
262262
// object to agent space (no scale)

indra/newview/llsettingsvo.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,8 +1091,8 @@ void LLSettingsVOWater::applySpecial(void *ptarget, bool force)
10911091

10921092
LLVector4 waterPlane(enorm.x, enorm.y, enorm.z, -glm::dot(ep, enorm));
10931093

1094-
norm = glm::make_vec3(gPipeline.mHeroProbeManager.mMirrorNormal.mV);
1095-
p = glm::make_vec3(gPipeline.mHeroProbeManager.mMirrorPosition.mV);
1094+
norm = glm::vec3(gPipeline.mHeroProbeManager.mMirrorNormal.mV[VZ], gPipeline.mHeroProbeManager.mMirrorNormal.mV[VY], gPipeline.mHeroProbeManager.mMirrorNormal.mV[VZ]);
1095+
p = glm::vec3(gPipeline.mHeroProbeManager.mMirrorPosition.mV[VX], gPipeline.mHeroProbeManager.mMirrorPosition.mV[VY], gPipeline.mHeroProbeManager.mMirrorPosition.mV[VZ]);
10961096
enorm = mul_mat4_vec3(invtrans, norm);
10971097
enorm = glm::normalize(enorm);
10981098
ep = mul_mat4_vec3(mat, p);

indra/newview/llviewercamera.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ bool LLViewerCamera::projectPosAgentToScreen(const LLVector3 &pos_agent, LLCoord
420420

421421
LLRect world_view_rect = gViewerWindow->getWorldViewRectRaw();
422422
glm::ivec4 viewport(world_view_rect.mLeft, world_view_rect.mBottom, world_view_rect.getWidth(), world_view_rect.getHeight());
423-
glm::vec3 win_coord = glm::project(glm::make_vec3(pos_agent.mV), get_current_modelview(), get_current_projection(), viewport);
423+
glm::vec3 win_coord = glm::project(glm::vec3(pos_agent.mV[VX], pos_agent.mV[VY], pos_agent.mV[VZ]), get_current_modelview(), get_current_projection(), viewport);
424424

425425
{
426426
// convert screen coordinates to virtual UI coordinates
@@ -514,7 +514,7 @@ bool LLViewerCamera::projectPosAgentToScreenEdge(const LLVector3 &pos_agent,
514514
LLRect world_view_rect = gViewerWindow->getWorldViewRectRaw();
515515

516516
glm::ivec4 viewport(world_view_rect.mLeft, world_view_rect.mBottom, world_view_rect.getWidth(), world_view_rect.getHeight());
517-
glm::vec3 win_coord = glm::project(glm::make_vec3(pos_agent.mV), get_current_modelview(), get_current_projection(), viewport);
517+
glm::vec3 win_coord = glm::project(glm::vec3(pos_agent.mV[VX], pos_agent.mV[VY], pos_agent.mV[VZ]), get_current_modelview(), get_current_projection(), viewport);
518518

519519
{
520520
win_coord.x /= gViewerWindow->getDisplayScale().mV[VX];

indra/newview/llvoavatar.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1939,10 +1939,10 @@ bool LLVOAvatar::lineSegmentIntersect(const LLVector4a& start, const LLVector4a&
19391939

19401940
if (linesegment_sphere(LLVector3(glm::value_ptr(p1)), LLVector3(glm::value_ptr(p2)), LLVector3(0,0,0), 1.f, position, norm))
19411941
{
1942-
glm::vec3 res_pos(glm::make_vec3(LLVector4(position).mV));
1942+
glm::vec3 res_pos(position.mV[VX], position.mV[VY], position.mV[VZ]);
19431943
res_pos = mul_mat4_vec3(mat, res_pos);
19441944

1945-
glm::vec3 res_norm(glm::make_vec3(LLVector4(norm).mV));
1945+
glm::vec3 res_norm(norm.mV[VX], norm.mV[VY], norm.mV[VZ]);
19461946
res_norm = glm::normalize(res_norm);
19471947
res_norm = glm::mat3(norm_mat) * res_norm;
19481948

indra/newview/pipeline.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8699,7 +8699,7 @@ void LLPipeline::renderDeferredLighting()
86998699

87008700
sVisibleLightCount++;
87018701

8702-
glm::vec3 tc(glm::make_vec3(LLVector4(center).mV));
8702+
glm::vec3 tc(center.mV[VX], center.mV[VY], center.mV[VZ]);
87038703
tc = mul_mat4_vec3(mat, tc);
87048704

87058705
setupSpotLight(gDeferredMultiSpotLightProgram, drawablep);
@@ -9832,7 +9832,7 @@ void LLPipeline::generateSunShadow(LLCamera& camera)
98329832
LLVector3 lightDir = -caster_dir;
98339833
lightDir.normVec();
98349834

9835-
glm::vec3 light_dir(glm::make_vec3(lightDir.mV));
9835+
glm::vec3 light_dir(lightDir.mV[VX], lightDir.mV[VY], lightDir.mV[VZ]);
98369836

98379837
//create light space camera matrix
98389838

@@ -9887,7 +9887,7 @@ void LLPipeline::generateSunShadow(LLCamera& camera)
98879887
//get good split distances for frustum
98889888
for (U32 i = 0; i < fp.size(); ++i)
98899889
{
9890-
glm::vec3 v(glm::make_vec3(fp[i].mV));
9890+
glm::vec3 v(fp[i].mV[VX], fp[i].mV[VY], fp[i].mV[VZ]);
98919891
v = mul_mat4_vec3(saved_view, v);
98929892
fp[i].setVec(glm::value_ptr(v));
98939893
}
@@ -10038,7 +10038,7 @@ void LLPipeline::generateSunShadow(LLCamera& camera)
1003810038

1003910039
for (U32 i = 0; i < fp.size(); i++)
1004010040
{
10041-
glm::vec3 p = glm::make_vec3(fp[i].mV);
10041+
glm::vec3 p(fp[i].mV[VX], fp[i].mV[VY], fp[i].mV[VZ]);
1004210042
p = mul_mat4_vec3(view[j], p);
1004310043
wpf.push_back(LLVector3(glm::value_ptr(p)));
1004410044
}
@@ -10241,7 +10241,7 @@ void LLPipeline::generateSunShadow(LLCamera& camera)
1024110241
view[j] = glm::inverse(view[j]);
1024210242
//llassert(origin.isFinite());
1024310243

10244-
glm::vec3 origin_agent(glm::make_vec3(LLVector4(origin).mV));
10244+
glm::vec3 origin_agent(origin.mV[VX], origin.mV[VY], origin.mV[VZ]);
1024510245

1024610246
//translate view to origin
1024710247
origin_agent = mul_mat4_vec3(view[j], origin_agent);

0 commit comments

Comments
 (0)