-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:
unknown
2010-10-02 02:13:17 -05:00
parent 3e8a7172db
commit b2bd45eed8
22 changed files with 207 additions and 103 deletions

View File

@@ -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

View File

@@ -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 )

View File

@@ -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}
)

View 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

View File

@@ -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

View File

@@ -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

View File

@@ -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(),

View File

@@ -403,6 +403,10 @@ LLTemplateParser::LLTemplateParser(LLTemplateTokenizer & tokens):
{
mMessages.push_back(templatep);
}
else
{
delete templatep;
}
}
if(!tokens.wantEOF())

View File

@@ -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;

View File

@@ -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;

View File

@@ -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
{

View File

@@ -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;
}
}
}

View File

@@ -144,6 +144,8 @@ LLPartSysCompressedPacket::LLPartSysCompressedPacket()
mData[i] = '\0';
}
mNumBytes = 0;
gSetInitDataDefaults(&mDefaults);
}

View File

@@ -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()

View File

@@ -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: ");

View File

@@ -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();

View File

@@ -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;
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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")

View File

@@ -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