Merge
commit
3c60fb24ca
|
|
@ -56,7 +56,8 @@ add_executable(llui_libtest ${llui_libtest_SOURCE_FILES})
|
|||
# Link with OS-specific libraries for LLWindow dependency
|
||||
if (DARWIN)
|
||||
find_library(COCOA_LIBRARY Cocoa)
|
||||
set(OS_LIBRARIES ${COCOA_LIBRARY})
|
||||
find_library(IOKIT_LIBRARY IOKit)
|
||||
set(OS_LIBRARIES ${COCOA_LIBRARY} ${IOKIT_LIBRARY})
|
||||
elseif (WINDOWS)
|
||||
#ll_stack_trace needs this now...
|
||||
list(APPEND WINDOWS_LIBRARIES dbghelp)
|
||||
|
|
|
|||
|
|
@ -7,6 +7,9 @@
|
|||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import <IOKit/IOKitLib.h>
|
||||
#import <CoreFoundation/CFBase.h>
|
||||
#import <CoreFoundation/CFNumber.h>
|
||||
#include "llwindowmacosx-objc.h"
|
||||
|
||||
// Some nasty shovelling of LLOpenGLView from LLNativeBindings to prevent any C++ <-> Obj-C interop oddities.
|
||||
|
|
@ -33,6 +36,8 @@
|
|||
- (CGLContextObj) getCGLContextObj;
|
||||
- (CGLPixelFormatObj*)getCGLPixelFormatObj;
|
||||
|
||||
- (unsigned long) getVramSize;
|
||||
|
||||
@end
|
||||
|
||||
@interface LLNSWindow : NSWindow {
|
||||
|
|
|
|||
|
|
@ -39,6 +39,24 @@
|
|||
|
||||
@implementation LLOpenGLView
|
||||
|
||||
- (unsigned long)getVramSize
|
||||
{
|
||||
CGLRendererInfoObj info = 0;
|
||||
GLint vram_bytes = 0;
|
||||
int num_renderers = 0;
|
||||
CGLError the_err = CGLQueryRendererInfo (CGDisplayIDToOpenGLDisplayMask(kCGDirectMainDisplay), &info, &num_renderers);
|
||||
if(0 == the_err)
|
||||
{
|
||||
CGLDescribeRenderer (info, 0, kCGLRPTextureMemory, &vram_bytes);
|
||||
CGLDestroyRendererInfo (info);
|
||||
}
|
||||
else
|
||||
{
|
||||
vram_bytes = (256 << 20);
|
||||
}
|
||||
return (unsigned long)vram_bytes;
|
||||
}
|
||||
|
||||
- (void)viewDidMoveToWindow
|
||||
{
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@ NSWindowRef createNSWindow(int x, int y, int width, int height);
|
|||
GLViewRef createOpenGLView(NSWindowRef window, unsigned int samples, bool vsync);
|
||||
void glSwapBuffers(void* context);
|
||||
CGLContextObj getCGLContextObj(GLViewRef view);
|
||||
unsigned long getVramSize(GLViewRef view);
|
||||
void getContentViewBounds(NSWindowRef window, float* bounds);
|
||||
void getWindowSize(NSWindowRef window, float* size);
|
||||
void setWindowSize(NSWindowRef window, int width, int height);
|
||||
|
|
|
|||
|
|
@ -237,6 +237,11 @@ CGLPixelFormatObj* getCGLPixelFormatObj(NSWindowRef window)
|
|||
return [glview getCGLPixelFormatObj];
|
||||
}
|
||||
|
||||
unsigned long getVramSize(GLViewRef view)
|
||||
{
|
||||
return [(LLOpenGLView *)view getVramSize];
|
||||
}
|
||||
|
||||
void getContentViewBounds(NSWindowRef window, float* bounds)
|
||||
{
|
||||
bounds[0] = [[(LLNSWindow*)window contentView] bounds].origin.x;
|
||||
|
|
|
|||
|
|
@ -441,6 +441,8 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
|
|||
mContext = getCGLContextObj(mGLView);
|
||||
// Since we just created the context, it needs to be set up.
|
||||
glNeedsInit = TRUE;
|
||||
|
||||
gGLManager.mVRAM = getVramSize(mGLView);
|
||||
}
|
||||
|
||||
// Hook up the context to a drawable
|
||||
|
|
@ -542,8 +544,9 @@ void LLWindowMacOSX::destroyContext()
|
|||
// Close the window
|
||||
if(mWindow != NULL)
|
||||
{
|
||||
closeWindow(mWindow);
|
||||
mWindow = NULL;
|
||||
NSWindowRef dead_window = mWindow;
|
||||
mWindow = NULL;
|
||||
closeWindow(dead_window);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -89,8 +89,10 @@ void LLFloaterHardwareSettings::refresh()
|
|||
|
||||
void LLFloaterHardwareSettings::refreshEnabledState()
|
||||
{
|
||||
F32 mem_multiplier = gSavedSettings.getF32("RenderTextureMemoryMultiple");
|
||||
|
||||
S32 min_tex_mem = LLViewerTextureList::getMinVideoRamSetting();
|
||||
S32 max_tex_mem = LLViewerTextureList::getMaxVideoRamSetting();
|
||||
S32 max_tex_mem = LLViewerTextureList::getMaxVideoRamSetting(false, mem_multiplier);
|
||||
getChild<LLSliderCtrl>("GraphicsCardTextureMemory")->setMinValue(min_tex_mem);
|
||||
getChild<LLSliderCtrl>("GraphicsCardTextureMemory")->setMaxValue(max_tex_mem);
|
||||
|
||||
|
|
|
|||
|
|
@ -1191,7 +1191,7 @@ S32 LLViewerTextureList::getMinVideoRamSetting()
|
|||
|
||||
//static
|
||||
// Returns max setting for TextureMemory (in MB)
|
||||
S32 LLViewerTextureList::getMaxVideoRamSetting(bool get_recommended)
|
||||
S32 LLViewerTextureList::getMaxVideoRamSetting(bool get_recommended, float mem_multiplier)
|
||||
{
|
||||
S32 max_texmem;
|
||||
if (gGLManager.mVRAM != 0)
|
||||
|
|
@ -1235,7 +1235,10 @@ S32 LLViewerTextureList::getMaxVideoRamSetting(bool get_recommended)
|
|||
max_texmem = llmin(max_texmem, (S32)(system_ram/2));
|
||||
else
|
||||
max_texmem = llmin(max_texmem, (S32)(system_ram));
|
||||
|
||||
|
||||
// limit the texture memory to a multiple of the default if we've found some cards to behave poorly otherwise
|
||||
max_texmem = llmin(max_texmem, (S32) (mem_multiplier * (F32) max_texmem));
|
||||
|
||||
max_texmem = llclamp(max_texmem, getMinVideoRamSetting(), MAX_VIDEO_RAM_IN_MEGA_BYTES);
|
||||
|
||||
return max_texmem;
|
||||
|
|
@ -1248,7 +1251,7 @@ void LLViewerTextureList::updateMaxResidentTexMem(S32 mem)
|
|||
// Initialize the image pipeline VRAM settings
|
||||
S32 cur_mem = gSavedSettings.getS32("TextureMemory");
|
||||
F32 mem_multiplier = gSavedSettings.getF32("RenderTextureMemoryMultiple");
|
||||
S32 default_mem = getMaxVideoRamSetting(true); // recommended default
|
||||
S32 default_mem = getMaxVideoRamSetting(true, mem_multiplier); // recommended default
|
||||
if (mem == 0)
|
||||
{
|
||||
mem = cur_mem > 0 ? cur_mem : default_mem;
|
||||
|
|
@ -1258,10 +1261,7 @@ void LLViewerTextureList::updateMaxResidentTexMem(S32 mem)
|
|||
mem = default_mem;
|
||||
}
|
||||
|
||||
// limit the texture memory to a multiple of the default if we've found some cards to behave poorly otherwise
|
||||
mem = llmin(mem, (S32) (mem_multiplier * (F32) default_mem));
|
||||
|
||||
mem = llclamp(mem, getMinVideoRamSetting(), getMaxVideoRamSetting());
|
||||
mem = llclamp(mem, getMinVideoRamSetting(), getMaxVideoRamSetting(false, mem_multiplier));
|
||||
if (mem != cur_mem)
|
||||
{
|
||||
gSavedSettings.setS32("TextureMemory", mem);
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ public:
|
|||
void setDebugFetching(LLViewerFetchedTexture* tex, S32 debug_level);
|
||||
|
||||
static S32 getMinVideoRamSetting();
|
||||
static S32 getMaxVideoRamSetting(bool get_recommended = false);
|
||||
static S32 getMaxVideoRamSetting(bool get_recommended, float mem_multiplier);
|
||||
|
||||
private:
|
||||
void updateImagesDecodePriorities();
|
||||
|
|
|
|||
Loading…
Reference in New Issue