Age | Commit message (Collapse) | Author |
|
|
|
|
|
Introduce helper classes to manage paired initProfile() / finishProfile()
calls and gBenchmarkProgram.bind() / unbind() calls.
Make TextureHolder a class instead of a struct.
Per Henri Beauchamp, since gpu_benchmark() takes a very early exit if
(!gGLManager.mHasTimerQuery), subsequent tests of mHasTimerQuery are
redundant. Remove.
One of those tests controls the busted_finish bool, which can never become
true. Remove that and all tests on it.
|
|
A classic-C array doesn't destroy its individual elements, but a std::vector
does. Use a std::vector<LLRenderTarget> for dest, so each LLRenderTarget will
be destroyed. ~LLRenderTarget() calls its release() method.
|
|
Ruslan tracked the observed crash to assignments (to create a dummy triangle)
through an LLStrider<LLVector3> obtained from getVertexStrider(). When
getVertexStrider() returns false, produce a warning and just skip the rest of
the benchmark test.
The one bit of explicit cleanup apparently required by that early exit is a
call to LLImageGL::deleteTextures() to match the preceding generateTextures()
call. Wrap both in a new TextureHolder class whose destructor takes care of
cleanup. The only other references to the corresponding U32 array are a couple
calls to LLTexUnit::bindManual(); add a bind() method to support that.
Also fix apparent bug in the LL_DARWIN special case for "improbably high and
likely incorrect": the code assigned -1.f (the "couldn't compute" value) to
gbps, overlooking the fact that gbps is unconditionally recomputed below. In
the "likely incorrect" stanza, simply return -1.f instead.
|
|
In case of buff->getVertexStrider(v) return false it mean that glMapBufferRange() return NULL
The next three lines can be the reason of this crash.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The /marker switch is passed by the (new) VMP. If any user wants to explicitly
pass the /marker switch to the installer, s/he shouldn't mind ending up with
an nsis.winstall file in the download directory.
|
|
LLTextureFetchWorker::doWork()
The trouble lines are:
U8 * buffer = (U8 *) ALLOCATE_MEM(LLImageBase::getPrivatePool(), total_size);
if (cur_size > 0)
{
memcpy(buffer, mFormattedImage->getData(), cur_size);
}
If 'cur_size > mHttpReplyOffset + append_size' then 'total_size -= src_offset' will cause
total_size to be smaller than cur_size causing a write access violation on the memcpy.
Since the response is invalid it seemed best to make it follow the other failed partial condition.
(transplanted from 737e28ec6b4d74f3ff915a4effc13d7b615a6a9b)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Now that LLManifest.prefix() supports use as a context manager:
with self.prefix(...):
...
convert existing calls to that form.
This was an interesting exercise because it surfaced at least two places where
the indentation did not match the self.prefix() nesting, plus another place
where existing code was undented without a self.end_prefix() call. (That last
was an uncaught logic bug.) This underscores the value of using a SINGLE
consistent, idiomatic mechanism to limit the scope of each self.prefix() call.
|
|
LLManifest.prefix() dates back to before Python had a 'with' statement or the
notion of a context manager. That's why every prefix() call requires a
corresponding end_prefix() call.
Existing usage is of the form:
if self.prefix(...some args...):
self.path(...)
...
self.end_prefix()
The use of an 'if' statement is solely to allow the coder to indent the
statements between the self.prefix() call and the corresponding call to
self.end_prefix() -- there is no intention to make that code conditional.
self.prefix() unconditionally returned True to facilitate that usage.
But now that we have the 'with' statement, this all feels a little silly. Make
prefix() return an instance of a context-manager class so that it's reasonable
to say instead:
with self.prefix(...some args...):
self.path(...)
...
and have the Right Things happen simply by leaving the 'with' block.
The only tricky part is code to preserve compatibility with old-style usage:
* The context manager has a __nonzero__() method so that if it's tested in an
'if' statement, it can unconditionally return True.
* On leaving the 'with' block, rather than simply popping the top of each
prefix stack, the context manager restores its length to the same length it
had before that prefix() call. This allows for (erroneous but hardly
unlikely) usage of the form:
with self.prefix(...some args...):
self.path(...)
...
self.end_prefix()
Restoring the previous length makes the context manager insensitive to whether
or not end_prefix() has popped the most recent prefix() entries.
|
|
|
|
The new helper functions check_curl_easy_setopt() and
check_curl_multi_setopt() encapsulate the pervasive idiom:
code = curl_{easy,multi}_setopt(handle, option, arg);
check_curl_{easy,multi}_code(code, option);
But since each of these helper functions contains its own local CURL{,M}code
variable 'code', having a caller-scope variable reused for every such call is
no longer necessary -- in fact is no longer used at all. That produces a fatal
warning with MSVC. Get rid of those now-unused variables.
|
|
|
|
|
|
Mani captured that snapshot back when CMake version 2.8 was newer than what
was running on our build systems. Now we have to assume that the bundled
GetPrerequisites.cmake is better than our old snapshot. Use the bunded one.
|
|
To support that, enhance path_optional() to accept wildcards and return the
expanded filenames.
|
|
|
|
|
|
|
|
generalize exception catching for platform specific code
|
|
* do not redirect stderr to stdout
* catch errors generated in platform specific code and display them more nicely
* run_command no longer captures output (only used in one place;
replaced that with direct use of subprocess)
|
|
|
|
background for CONTENT_TYPE_HTML. (The color we pass to CEF has 4 compontents red, blue, green and alpha. We were only passing 3 and setting the color and not the alpha. At somepoint in CEF's history the default value must have changed. Passing 0xFF for alpha too - i.e. fully opaque - fixes this)
|
|
|
|
You can't legitimately perform an ordered comparison between a pointer and an
int, even 0. Fix a number of 'if (ptr > 0)' to plain 'if (ptr)'.
Fix LLEditWearableDictionary::WearableEntry constructor to avoid varargs
mechanism. It used to accept three different counts, followed by three
different lists of enums, fetched in each case as 'int' -- dubious in itself.
The constructor body performed three different loops to populate those enums
into three different member vectors.
Instead, make the constructor accept three vectors and initialize the member
vectors from the passed vectors. Now that C++ has inline vector
initialization, change existing constructor calls to pass temporary vectors
initialized with what used to be the varargs enum values.
|
|
|
|
The viewer's 00-COMPILE-LINK-RUN.txt recommends passing -gdwarf-2 to the Mac
compiler, and so we've been doing ever since before the viewer-build-variables
repo was engaged. Now we discover that when CMake sees -gdwarf-2, it removes
the -g switch entirely. It also removes it when you pass plain -g. Only when
you pass -gdwarf-with-dsym or just -gdwarf does CMake pass plain -g to the
compiler. Change -gdwarf-2, if specified, to -gdwarf so we at least get -g.
|
|
|
|
starts before 2D login screen is cleared.
FIXED
|
|
|
|
|
|
|
|
|
|
|
|
viewer
FIXED
|
|
|
|
|