-Screwed around with SSE2.
-Added ReleaseSSE2 as a build target. -LL_VECTORIZE is silly and breaks things... -Small little tweaks. I have not tested if the cmake alterations work under linux and darwin. Hollar if broken.
This commit is contained in:
@@ -32,7 +32,7 @@ include(UnixInstall)
|
||||
|
||||
if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
|
||||
"Build type. One of: Debug Release RelWithDebInfo" FORCE)
|
||||
"Build type. One of: Debug Release ReleaseSSE2 RelWithDebInfo" FORCE)
|
||||
endif (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
|
||||
|
||||
# Create a 'prepare' target in which to perform setup actions. This
|
||||
|
||||
@@ -10,13 +10,15 @@ include(Variables)
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-D_DEBUG -DLL_DEBUG=1")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE
|
||||
"-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=1 -DNDEBUG")
|
||||
set(CMAKE_CXX_FLAGS_RELEASESSE2
|
||||
"-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=1 -DNDEBUG")
|
||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
||||
"-DLL_RELEASE=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=0 -DNDEBUG -DLL_RELEASE_WITH_DEBUG_INFO=1")
|
||||
|
||||
|
||||
# Don't bother with a MinSizeRel build.
|
||||
|
||||
set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Release;Debug" CACHE STRING
|
||||
set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Release;ReleaseSSE2;Debug" CACHE STRING
|
||||
"Supported build types." FORCE)
|
||||
|
||||
# Platform-specific compilation flags.
|
||||
@@ -33,7 +35,10 @@ if (WINDOWS)
|
||||
set(CMAKE_CXX_FLAGS_RELEASE
|
||||
"${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP"
|
||||
CACHE STRING "C++ compiler release options" FORCE)
|
||||
|
||||
set(CMAKE_CXX_FLAGS_RELEASESSE2
|
||||
"${CMAKE_CXX_FLAGS_RELEASESSE2} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /arch:SSE2"
|
||||
CACHE STRING "C++ compiler release-SSE2 options" FORCE)
|
||||
|
||||
set(CMAKE_CXX_STANDARD_LIBRARIES "")
|
||||
set(CMAKE_C_STANDARD_LIBRARIES "")
|
||||
|
||||
@@ -54,6 +59,9 @@ if (WINDOWS)
|
||||
set(CMAKE_CXX_FLAGS_RELEASE
|
||||
"${CMAKE_CXX_FLAGS_RELEASE} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
|
||||
CACHE STRING "C++ compiler release options" FORCE)
|
||||
set(CMAKE_CXX_FLAGS_RELEASESSE2
|
||||
"${CMAKE_CXX_FLAGS_RELEASESSE2} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
|
||||
CACHE STRING "C++ compiler release-SSE2 options" FORCE)
|
||||
|
||||
add_definitions(
|
||||
/Zc:wchar_t-
|
||||
@@ -160,10 +168,12 @@ if (LINUX)
|
||||
# this stops us requiring a really recent glibc at runtime
|
||||
add_definitions(-fno-stack-protector)
|
||||
endif (NOT STANDALONE)
|
||||
set(CMAKE_CXX_FLAGS_RELEASESSE2 "${CMAKE_CXX_FLAGS_RELEASESSE2} -mfpmath=sse2 -msse2")
|
||||
endif (VIEWER)
|
||||
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-fno-inline ${CMAKE_CXX_FLAGS_DEBUG}")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "-O2 ${CMAKE_CXX_FLAGS_RELEASE}")
|
||||
set(CMAKE_CXX_FLAGS_RELEASESSE2 "-O2 ${CMAKE_CXX_FLAGS_RELEASESSE2}")
|
||||
endif (LINUX)
|
||||
|
||||
|
||||
@@ -177,6 +187,8 @@ if (DARWIN)
|
||||
# NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered.
|
||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O0 ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
|
||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O0 ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
|
||||
set(CMAKE_CXX_FLAGS_RELEASESSE2 "-msse2 -mfpmath=sse ${CMAKE_CXX_FLAGS_RELEASESSE2}")
|
||||
set(CMAKE_C_FLAGS_RELEASESSE2 "-msse2 -mfpmath=sse ${CMAKE_C_FLAGS_RELEASESSE2}")
|
||||
endif (DARWIN)
|
||||
|
||||
|
||||
@@ -228,3 +240,17 @@ endif(1 EQUAL 1)
|
||||
if(SERVER)
|
||||
include_directories(${LIBS_PREBUILT_DIR}/include/havok)
|
||||
endif(SERVER)
|
||||
|
||||
SET( CMAKE_EXE_LINKER_FLAGS_RELEASESSE2
|
||||
"${CMAKE_EXE_LINKER_FLAGS_RELEASE}" CACHE STRING
|
||||
"Flags used for linking binaries under SSE2 build."
|
||||
FORCE )
|
||||
SET( CMAKE_SHARED_LINKER_FLAGS_RELEASESSE2
|
||||
"${CMAKE_SHARED_LINKER_FLAGS_RELEASE}" CACHE STRING
|
||||
"Flags used by the shared libraries linker under SSE2 build."
|
||||
FORCE )
|
||||
MARK_AS_ADVANCED(
|
||||
CMAKE_CXX_FLAGS_RELEASESSE2
|
||||
CMAKE_C_FLAGS_RELEASESSE2
|
||||
CMAKE_EXE_LINKER_FLAGS_RELEASESSE2
|
||||
CMAKE_SHARED_LINKER_FLAGS_RELEASESSE2 )
|
||||
|
||||
@@ -109,6 +109,14 @@ copy_if_different(
|
||||
)
|
||||
set(all_targets ${all_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${plugintest_release_src_dir}
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/ReleaseSSE2"
|
||||
out_targets
|
||||
${plugintest_release_files}
|
||||
)
|
||||
set(all_targets ${all_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${plugintest_release_src_dir}
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/RelWithDebInfo"
|
||||
@@ -135,6 +143,14 @@ copy_if_different(
|
||||
)
|
||||
set(all_targets ${all_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${plugintest_release_src_dir}
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/ReleaseSSE2/imageformats"
|
||||
out_targets
|
||||
${plugintest_release_files}
|
||||
)
|
||||
set(all_targets ${all_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${plugintest_release_src_dir}
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/RelWithDebInfo/imageformats"
|
||||
@@ -151,6 +167,14 @@ copy_if_different(
|
||||
)
|
||||
set(all_targets ${all_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${plugintest_release_src_dir}
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/llplugin/imageformats"
|
||||
out_targets
|
||||
${plugintest_release_files}
|
||||
)
|
||||
set(all_targets ${all_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${plugintest_release_src_dir}
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llplugin/imageformats"
|
||||
@@ -197,6 +221,14 @@ copy_if_different(
|
||||
)
|
||||
set(all_targets ${all_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${plugins_release_src_dir}
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/llplugin"
|
||||
out_targets
|
||||
${plugins_release_files}
|
||||
)
|
||||
set(all_targets ${all_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${plugins_release_src_dir}
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llplugin"
|
||||
@@ -226,6 +258,22 @@ copy_if_different(
|
||||
)
|
||||
set(all_targets ${all_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${release_src_dir}
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2"
|
||||
out_targets
|
||||
${release_files}
|
||||
)
|
||||
set(all_targets ${all_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${vivox_src_dir}
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2"
|
||||
out_targets
|
||||
${vivox_files}
|
||||
)
|
||||
set(all_targets ${all_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${release_src_dir}
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo"
|
||||
@@ -276,6 +324,15 @@ else(EXISTS ${internal_llkdu_path})
|
||||
COMMENT "Copying llkdu.dll ${CMAKE_CURRENT_BINARY_DIR}/Release"
|
||||
)
|
||||
set(all_targets ${all_targets} ${release_llkdu_dst})
|
||||
|
||||
set(releasesse2_llkdu_dst "${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/llkdu.dll")
|
||||
ADD_CUSTOM_COMMAND(
|
||||
OUTPUT ${releasesse2_llkdu_dst}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${release_llkdu_src} ${releasesse2_llkdu_dst}
|
||||
DEPENDS ${release_llkdu_src}
|
||||
COMMENT "Copying llkdu.dll ${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2"
|
||||
)
|
||||
set(all_targets ${all_targets} ${releasesse2_llkdu_dst})
|
||||
|
||||
set(relwithdebinfo_llkdu_dst "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llkdu.dll")
|
||||
ADD_CUSTOM_COMMAND(
|
||||
@@ -351,6 +408,14 @@ if (MSVC80)
|
||||
)
|
||||
set(all_targets ${all_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${release_msvc8_redist_path}
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2"
|
||||
out_targets
|
||||
${release_msvc8_files}
|
||||
)
|
||||
set(all_targets ${all_targets} ${out_targets})
|
||||
|
||||
copy_if_different(
|
||||
${release_msvc8_redist_path}
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo"
|
||||
@@ -372,6 +437,19 @@ if (MSVC80)
|
||||
COMMENT "Creating release app config file"
|
||||
)
|
||||
|
||||
set(releasesse2_appconfig_file ${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/Ascent.exe.config)
|
||||
add_custom_command(
|
||||
OUTPUT ${releasesse2_appconfig_file}
|
||||
COMMAND ${PYTHON_EXECUTABLE}
|
||||
ARGS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/build_win32_appConfig.py
|
||||
${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/Microsoft.VC80.CRT.manifest
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/SecondLife.exe.config
|
||||
${releasesse2_appconfig_file}
|
||||
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/Microsoft.VC80.CRT.manifest
|
||||
COMMENT "Creating release-sse2 app config file"
|
||||
)
|
||||
|
||||
set(relwithdebinfo_appconfig_file ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/Ascent.exe.config)
|
||||
add_custom_command(
|
||||
OUTPUT ${relwithdebinfo_appconfig_file}
|
||||
@@ -392,6 +470,7 @@ add_custom_target(copy_win_libs ALL
|
||||
DEPENDS
|
||||
${all_targets}
|
||||
${release_appconfig_file}
|
||||
${releasesse2_appconfig_file}
|
||||
${relwithdebinfo_appconfig_file}
|
||||
${debug_appconfig_file}
|
||||
)
|
||||
|
||||
@@ -70,7 +70,7 @@ def quote(opts):
|
||||
class PlatformSetup(object):
|
||||
generator = None
|
||||
build_types = {}
|
||||
for t in ('Debug', 'Release', 'RelWithDebInfo'):
|
||||
for t in ('Debug', 'Release', 'ReleaseSSE2', 'RelWithDebInfo'):
|
||||
build_types[t.lower()] = t
|
||||
|
||||
build_type = build_types['relwithdebinfo']
|
||||
@@ -725,7 +725,7 @@ Options:
|
||||
--standalone build standalone, without Linden prebuild libraries
|
||||
--unattended build unattended, do not invoke any tools requiring
|
||||
a human response
|
||||
-t | --type=NAME build type ("Debug", "Release", or "RelWithDebInfo")
|
||||
-t | --type=NAME build type ("Debug", "Release", "ReleaseSSE2", or "RelWithDebInfo")
|
||||
-m32 | -m64 build architecture (32-bit or 64-bit)
|
||||
-N | --no-distcc disable use of distcc
|
||||
-G | --generator=NAME generator name
|
||||
|
||||
@@ -120,7 +120,7 @@ ARGUMENTS=[
|
||||
On Linux this would try to use Linux_i686Manifest.""",
|
||||
default=""),
|
||||
dict(name='build', description='Build directory.', default=DEFAULT_SRCTREE),
|
||||
dict(name='buildtype', description="""The build type used. ('Debug', 'Release', or 'RelWithDebInfo')
|
||||
dict(name='buildtype', description="""The build type used. ('Debug', 'Release', 'ReleaseSSE2' or 'RelWithDebInfo')
|
||||
Default is Release """,
|
||||
default="Release"),
|
||||
dict(name='branding_id', description="""Identifier for the branding set to
|
||||
|
||||
@@ -4875,57 +4875,20 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)
|
||||
else
|
||||
{
|
||||
// Not hollow, generate the triangle fan.
|
||||
U16 v1 = 2;
|
||||
U16 v2 = 1;
|
||||
|
||||
if (mTypeMask & TOP_MASK)
|
||||
{
|
||||
if (mTypeMask & OPEN_MASK)
|
||||
{
|
||||
// SOLID OPEN TOP
|
||||
// Generate indices
|
||||
// This is a tri-fan, so we reuse the same first point for all triangles.
|
||||
for (S32 i = 0; i < (num_vertices - 2); i++)
|
||||
{
|
||||
mIndices[3*i] = num_vertices - 1;
|
||||
mIndices[3*i+1] = i;
|
||||
mIndices[3*i+2] = i + 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// SOLID CLOSED TOP
|
||||
for (S32 i = 0; i < (num_vertices - 2); i++)
|
||||
{
|
||||
//MSMSM fix these caps but only for the un-cut case
|
||||
mIndices[3*i] = num_vertices - 1;
|
||||
mIndices[3*i+1] = i;
|
||||
mIndices[3*i+2] = i + 1;
|
||||
}
|
||||
}
|
||||
v1 = 1;
|
||||
v2 = 2;
|
||||
}
|
||||
else
|
||||
|
||||
for (S32 i = 0; i < (num_vertices - 2); i++)
|
||||
{
|
||||
if (mTypeMask & OPEN_MASK)
|
||||
{
|
||||
// SOLID OPEN BOTTOM
|
||||
// Generate indices
|
||||
// This is a tri-fan, so we reuse the same first point for all triangles.
|
||||
for (S32 i = 0; i < (num_vertices - 2); i++)
|
||||
{
|
||||
mIndices[3*i] = num_vertices - 1;
|
||||
mIndices[3*i+1] = i + 1;
|
||||
mIndices[3*i+2] = i;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// SOLID CLOSED BOTTOM
|
||||
for (S32 i = 0; i < (num_vertices - 2); i++)
|
||||
{
|
||||
//MSMSM fix these caps but only for the un-cut case
|
||||
mIndices[3*i] = num_vertices - 1;
|
||||
mIndices[3*i+1] = i + 1;
|
||||
mIndices[3*i+2] = i;
|
||||
}
|
||||
}
|
||||
mIndices[3*i] = num_vertices - 1;
|
||||
mIndices[3*i+v1] = i;
|
||||
mIndices[3*i+v2] = i + 1;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
@@ -5189,31 +5152,20 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
|
||||
//generate normals
|
||||
for (U32 i = 0; i < mIndices.size()/3; i++) //for each triangle
|
||||
{
|
||||
const S32 i0 = mIndices[i*3+0];
|
||||
const S32 i1 = mIndices[i*3+1];
|
||||
const S32 i2 = mIndices[i*3+2];
|
||||
const VertexData& v0 = mVertices[i0];
|
||||
const VertexData& v1 = mVertices[i1];
|
||||
const VertexData& v2 = mVertices[i2];
|
||||
const U16* idx = &(mIndices[i*3]);
|
||||
|
||||
VertexData* v[] =
|
||||
{ &mVertices[idx[0]], &mVertices[idx[1]], &mVertices[idx[2]] };
|
||||
|
||||
//calculate triangle normal
|
||||
LLVector3 norm = (v0.mPosition-v1.mPosition) % (v0.mPosition-v2.mPosition);
|
||||
LLVector3 norm = (v[0]->mPosition-v[1]->mPosition) % (v[0]->mPosition-v[2]->mPosition);
|
||||
|
||||
for (U32 j = 0; j < 3; j++)
|
||||
{ //add triangle normal to vertices
|
||||
const S32 idx = mIndices[i*3+j];
|
||||
mVertices[idx].mNormal += norm; // * (weight_sum - d[j])/weight_sum;
|
||||
}
|
||||
v[0]->mNormal += norm;
|
||||
v[1]->mNormal += norm;
|
||||
v[2]->mNormal += norm;
|
||||
|
||||
//even out quad contributions
|
||||
if ((i & 1) == 0)
|
||||
{
|
||||
mVertices[i2].mNormal += norm;
|
||||
}
|
||||
else
|
||||
{
|
||||
mVertices[i1].mNormal += norm;
|
||||
}
|
||||
v[i%2+1]->mNormal += norm;
|
||||
}
|
||||
|
||||
// adjust normals based on wrapping and stitching
|
||||
|
||||
@@ -357,7 +357,7 @@ LLPointer<LLIMInfo> llsd_to_im_info(const LLSD& im_info_sd)
|
||||
param_message["message"].asString(),
|
||||
param_message["id"].asUUID(),
|
||||
(U32) param_message["parent_estate_id"].asInteger(),
|
||||
im_info->mRegionID = param_message["region_id"].asUUID(),
|
||||
param_message["region_id"].asUUID(),
|
||||
ll_vector3_from_sd(param_message["position"]),
|
||||
param_message["data"],
|
||||
(U8) param_message["offline"].asInteger(),
|
||||
|
||||
@@ -403,6 +403,10 @@ LLTemplateParser::LLTemplateParser(LLTemplateTokenizer & tokens):
|
||||
{
|
||||
mMessages.push_back(templatep);
|
||||
}
|
||||
else
|
||||
{
|
||||
delete templatep;
|
||||
}
|
||||
}
|
||||
|
||||
if(!tokens.wantEOF())
|
||||
|
||||
@@ -963,6 +963,7 @@ std::ostream& operator<<(std::ostream& s, const LLNameValue &a)
|
||||
U64_to_str(*a.mNameValueReference.u64, u64_string, sizeof(u64_string));
|
||||
s << u64_string;
|
||||
}
|
||||
break;
|
||||
case NVT_VEC3:
|
||||
s << *(a.mNameValueReference.vec3);
|
||||
break;
|
||||
|
||||
@@ -42,6 +42,9 @@
|
||||
|
||||
LLPacketBuffer::LLPacketBuffer(const LLHost &host, const char *datap, const S32 size) : mHost(host)
|
||||
{
|
||||
mSize = 0;
|
||||
mData[0] = '!';
|
||||
|
||||
if (size > NET_BUFFER_SIZE)
|
||||
{
|
||||
llerrs << "Sending packet > " << NET_BUFFER_SIZE << " of size " << size << llendl;
|
||||
|
||||
@@ -98,7 +98,9 @@ std::string LLServiceBuilder::buildServiceURI(const std::string& service_name)
|
||||
{
|
||||
std::ostringstream service_url;
|
||||
// Find the service builder
|
||||
if(mServiceMap.find(service_name) != mServiceMap.end())
|
||||
std::map<std::string, std::string>::const_iterator it =
|
||||
mServiceMap.find(service_name);
|
||||
if(it != mServiceMap.end())
|
||||
{
|
||||
// construct the service builder url
|
||||
LLApp* app = LLApp::instance();
|
||||
@@ -119,7 +121,7 @@ std::string LLServiceBuilder::buildServiceURI(const std::string& service_name)
|
||||
}
|
||||
service_url << base_url.asString();
|
||||
}
|
||||
service_url << mServiceMap[service_name];
|
||||
service_url << it->second;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -326,7 +326,7 @@ void LLTemplateMessageBuilder::addData(const char *varname, const void *data, EM
|
||||
<< "(" << size << "). Clamping size and truncating data." << llendl;
|
||||
size = 255;
|
||||
char *truncate = (char *)data;
|
||||
truncate[255] = 0;
|
||||
truncate[254] = 0; // array size is 255 but the last element index is 254
|
||||
}
|
||||
|
||||
// no correct size for MVT_VARIABLE, instead we need to tell how many bytes the size will be encoded as
|
||||
@@ -737,10 +737,14 @@ static S32 buildBlock(U8* buffer, S32 buffer_size, const LLMessageBlock* templat
|
||||
}
|
||||
|
||||
--block_count;
|
||||
++block_iter;
|
||||
|
||||
if (block_iter != message_data->mMemberBlocks.end())
|
||||
{
|
||||
mbci = block_iter->second;
|
||||
++block_iter;
|
||||
if (block_iter != message_data->mMemberBlocks.end())
|
||||
{
|
||||
mbci = block_iter->second;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -144,6 +144,8 @@ LLPartSysCompressedPacket::LLPartSysCompressedPacket()
|
||||
mData[i] = '\0';
|
||||
}
|
||||
|
||||
mNumBytes = 0;
|
||||
|
||||
gSetInitDataDefaults(&mDefaults);
|
||||
}
|
||||
|
||||
|
||||
@@ -467,39 +467,32 @@ static void settings_modify()
|
||||
gDebugGL = gSavedSettings.getBOOL("RenderDebugGL");
|
||||
gDebugPipeline = gSavedSettings.getBOOL("RenderDebugPipeline");
|
||||
gAuditTexture = gSavedSettings.getBOOL("AuditTexture");
|
||||
#if LL_VECTORIZE
|
||||
if (gSysCPU.hasAltivec())
|
||||
|
||||
if (gSysCPU.hasAltivec()) //for mac. No intrinsics used. No real risk of breaking compat.
|
||||
{
|
||||
gSavedSettings.setBOOL("VectorizeEnable", TRUE );
|
||||
gSavedSettings.setU32("VectorizeProcessor", 0 );
|
||||
}
|
||||
else
|
||||
if (gSysCPU.hasSSE2())
|
||||
|
||||
//Slightly confusing, but with linux llviewerjointmesh_sse(2) are compiled with relevent sse flags set.
|
||||
//However, on windows or mac said files are only compiled with sse(2) if the entire project is.
|
||||
else if (gSysCPU.hasSSE2() && LLViewerJointMesh::supportsSSE2())
|
||||
{
|
||||
gSavedSettings.setBOOL("VectorizeEnable", TRUE );
|
||||
gSavedSettings.setU32("VectorizeProcessor", 2 );
|
||||
}
|
||||
else
|
||||
if (gSysCPU.hasSSE())
|
||||
else if (gSysCPU.hasSSE() && LLViewerJointMesh::supportsSSE())
|
||||
{
|
||||
gSavedSettings.setBOOL("VectorizeEnable", TRUE );
|
||||
gSavedSettings.setU32("VectorizeProcessor", 1 );
|
||||
}
|
||||
else
|
||||
else // This build target doesn't support SSE, don't test/run.
|
||||
{
|
||||
// Don't bother testing or running if CPU doesn't support it. JC
|
||||
gSavedSettings.setBOOL("VectorizePerfTest", FALSE );
|
||||
gSavedSettings.setBOOL("VectorizeEnable", FALSE );
|
||||
gSavedSettings.setU32("VectorizeProcessor", 0 );
|
||||
gSavedSettings.setBOOL("VectorizeSkin", FALSE);
|
||||
}
|
||||
#else
|
||||
// This build target doesn't support SSE, don't test/run.
|
||||
gSavedSettings.setBOOL("VectorizePerfTest", FALSE );
|
||||
gSavedSettings.setBOOL("VectorizeEnable", FALSE );
|
||||
gSavedSettings.setU32("VectorizeProcessor", 0 );
|
||||
gSavedSettings.setBOOL("VectorizeSkin", FALSE);
|
||||
#endif
|
||||
}
|
||||
|
||||
void LLAppViewer::initGridChoice()
|
||||
|
||||
@@ -219,6 +219,18 @@ LLFloaterAbout::LLFloaterAbout()
|
||||
support.append( (const char*) glGetString(GL_VERSION) );
|
||||
support.append("\n");
|
||||
|
||||
std::string sse_ver = "None";
|
||||
#if _M_IX86_FP > 0 //Windows
|
||||
sse_ver = llformat("SSE%i", _M_IX86_FP );
|
||||
#elif defined(__SSE2__) //GCC
|
||||
sse_ver = "SSE2";
|
||||
#elif defined(__SSE__) //GCC
|
||||
sse_ver = "SSE";
|
||||
#endif
|
||||
support.append("SSE Version: ");
|
||||
support.append(sse_ver);
|
||||
support.append("\n");
|
||||
|
||||
support.append("\n");
|
||||
|
||||
support.append("libcurl Version: ");
|
||||
|
||||
@@ -677,6 +677,8 @@ void LLViewerParcelMgr::renderParcel(LLParcel* parcel )
|
||||
// coordinates correctly.
|
||||
void LLViewerParcelMgr::renderOneSegment(F32 x1, F32 y1, F32 x2, F32 y2, F32 height, U8 direction, LLViewerRegion* regionp)
|
||||
{
|
||||
if(!regionp) //This has been null before. Oh no!
|
||||
return;
|
||||
// HACK: At edge of last region of world, we need to make sure the region
|
||||
// resolves correctly so we can get a height value.
|
||||
const F32 BORDER = REGION_WIDTH_METERS - 0.1f;
|
||||
@@ -692,11 +694,8 @@ void LLViewerParcelMgr::renderOneSegment(F32 x1, F32 y1, F32 x2, F32 y2, F32 hei
|
||||
if (clamped_y2 > BORDER) clamped_y2 = BORDER;
|
||||
|
||||
F32 z;
|
||||
F32 z1;
|
||||
F32 z2;
|
||||
|
||||
z1 = regionp->getLand().resolveHeightRegion( LLVector3( clamped_x1, clamped_y1, 0.f ) );
|
||||
z2 = regionp->getLand().resolveHeightRegion( LLVector3( clamped_x2, clamped_y2, 0.f ) );
|
||||
F32 z1 = regionp->getLand().resolveHeightRegion( LLVector3( clamped_x1, clamped_y1, 0.f ) );;
|
||||
F32 z2 = regionp->getLand().resolveHeightRegion( LLVector3( clamped_x2, clamped_y2, 0.f ) );;
|
||||
|
||||
// Convert x1 and x2 from region-local to agent coords.
|
||||
LLVector3 origin = regionp->getOriginAgent();
|
||||
|
||||
@@ -865,12 +865,18 @@ void LLViewerJointMesh::updateVectorize()
|
||||
{
|
||||
case 2:
|
||||
sUpdateGeometryFunc = &updateGeometrySSE2;
|
||||
if(!supportsSSE2())
|
||||
LL_INFOS("AppInit") << "VectorizeProcessor set to unsupported implementation! (SSE2)" << LL_ENDL ;
|
||||
break;
|
||||
case 1:
|
||||
sUpdateGeometryFunc = &updateGeometrySSE;
|
||||
if(!supportsSSE())
|
||||
LL_INFOS("AppInit") << "VectorizeProcessor set to unsupported implementation! (SSE)" << LL_ENDL ;
|
||||
break;
|
||||
default:
|
||||
sUpdateGeometryFunc = &updateGeometryVectorized;
|
||||
if(!gSysCPU.hasAltivec())
|
||||
LL_INFOS("AppInit") << "VectorizeProcessor set to unsupported implementation! (Altivec)" << LL_ENDL ;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,6 +152,8 @@ public:
|
||||
|
||||
static void updateVectorize(); // Update globals when settings variables change
|
||||
|
||||
static bool supportsSSE();
|
||||
static bool supportsSSE2();
|
||||
private:
|
||||
// Avatar vertex skinning is a significant performance issue on computers
|
||||
// with avatar vertex programs turned off (for example, most Macs). We
|
||||
|
||||
@@ -109,6 +109,10 @@ void LLViewerJointMesh::updateGeometrySSE(LLFace *face, LLPolyMesh *mesh)
|
||||
|
||||
buffer->setBuffer(0);
|
||||
}
|
||||
bool LLViewerJointMesh::supportsSSE()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
@@ -116,5 +120,10 @@ void LLViewerJointMesh::updateGeometrySSE(LLFace *face, LLPolyMesh *mesh)
|
||||
{
|
||||
LLViewerJointMesh::updateGeometryVectorized(face, mesh);
|
||||
}
|
||||
bool LLViewerJointMesh::supportsSSE()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
#include "v3math.h"
|
||||
|
||||
|
||||
#if LL_VECTORIZE
|
||||
#if LL_VECTORIZE && (_M_IX86_FP > 1 || defined(__SSE2__) ) //These intrinsics are only valid with sse2 or higher.
|
||||
|
||||
|
||||
inline void matrix_translate(LLV4Matrix4& m, const LLMatrix4* w, const LLVector3& j)
|
||||
@@ -116,6 +116,10 @@ void LLViewerJointMesh::updateGeometrySSE2(LLFace *face, LLPolyMesh *mesh)
|
||||
|
||||
//setBuffer(0) called in LLVOAvatar::renderSkinned
|
||||
}
|
||||
bool LLViewerJointMesh::supportsSSE2()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
@@ -123,5 +127,9 @@ void LLViewerJointMesh::updateGeometrySSE2(LLFace *face, LLPolyMesh *mesh)
|
||||
{
|
||||
LLViewerJointMesh::updateGeometryVectorized(face, mesh);
|
||||
}
|
||||
bool LLViewerJointMesh::supportsSSE2()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -176,7 +176,7 @@ class WindowsManifest(ViewerManifest):
|
||||
super(WindowsManifest, self).construct()
|
||||
# the final exe is complicated because we're not sure where it's coming from,
|
||||
# nor do we have a fixed name for the executable
|
||||
self.path(self.find_existing_file('debug/Ascent.exe', 'release/Ascent.exe', 'relwithdebinfo/Ascent.exe'), dst=self.final_exe())
|
||||
self.path(self.find_existing_file('debug/Ascent.exe', 'release/Ascent.exe', 'releaseSSE2/Ascent.exe', 'relwithdebinfo/Ascent.exe'), dst=self.final_exe())
|
||||
|
||||
# Plugin host application
|
||||
self.path(os.path.join(os.pardir,
|
||||
@@ -270,11 +270,13 @@ class WindowsManifest(ViewerManifest):
|
||||
self.path(src=self.find_existing_file( # tag:"crash-logger" here as a cue to the exporter
|
||||
"../win_crash_logger/debug/windows-crash-logger.exe",
|
||||
"../win_crash_logger/release/windows-crash-logger.exe",
|
||||
"../win_crash_logger/releaseSSE2/windows-crash-logger.exe",
|
||||
"../win_crash_logger/relwithdebinfo/windows-crash-logger.exe"),
|
||||
dst="win_crash_logger.exe")
|
||||
self.path(src=self.find_existing_file(
|
||||
"../win_updater/debug/windows-updater.exe",
|
||||
"../win_updater/release/windows-updater.exe",
|
||||
"../win_updater/releaseSSE2/windows-updater.exe",
|
||||
"../win_updater/relwithdebinfo/windows-updater.exe"),
|
||||
dst="updater.exe")
|
||||
|
||||
|
||||
@@ -178,7 +178,7 @@ Darwin)
|
||||
|
||||
CYGWIN)
|
||||
helpers=/cygdrive/c/buildscripts/shared/latest
|
||||
variants="Debug RelWithDebInfo Release"
|
||||
variants="Debug RelWithDebInfo Release ReleaseSSE2"
|
||||
#variants="Release"
|
||||
cmake_generator="vc80"
|
||||
fmod=fmodapi375win
|
||||
@@ -215,7 +215,7 @@ Linux)
|
||||
fi
|
||||
fi
|
||||
acquire_lock
|
||||
variants="Debug RelWithDebInfo Release"
|
||||
variants="Debug RelWithDebInfo Release ReleaseSSE2"
|
||||
#variants="Release"
|
||||
cmake_generator="Unix Makefiles"
|
||||
fmod=fmodapi375linux
|
||||
|
||||
Reference in New Issue
Block a user