You can now specify how much memory the chip can use for graphics memory via
a settings file. However, you cannot specify less than the amount taken by the BIOS (ie. your settings will be ignored if you do). Just put something like the following into a "intel_extreme" settings file: graphics_memory_size 16 To allocate 16 MB in total. Note, whatever value you specify will be rounded up to the next power of two, ie. if you specify 6 MB, 8 will be taken. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17444 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -11,6 +11,7 @@
|
|||||||
#include "driver.h"
|
#include "driver.h"
|
||||||
#include "utility.h"
|
#include "utility.h"
|
||||||
|
|
||||||
|
#include <driver_settings.h>
|
||||||
#include <util/kernel_cpp.h>
|
#include <util/kernel_cpp.h>
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
@@ -91,6 +92,36 @@ init_overlay_registers(overlay_registers *registers)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static size_t
|
||||||
|
determine_desired_memory_size()
|
||||||
|
{
|
||||||
|
size_t size = 8; // 8 MB
|
||||||
|
|
||||||
|
void *settings = load_driver_settings("intel_extreme");
|
||||||
|
if (settings != NULL) {
|
||||||
|
size_t specified = 0;
|
||||||
|
const char *string = get_driver_parameter(settings, "graphics_memory_size", "0", "0");
|
||||||
|
if (string != NULL)
|
||||||
|
specified = atoi(string);
|
||||||
|
|
||||||
|
unload_driver_settings(settings);
|
||||||
|
|
||||||
|
if (specified != 0) {
|
||||||
|
// take the next power of two
|
||||||
|
size_t desired = 1;
|
||||||
|
while (desired < specified) {
|
||||||
|
desired *= 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (desired < 128)
|
||||||
|
size = desired;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return size << 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
determine_stolen_memory_size(intel_info &info)
|
determine_stolen_memory_size(intel_info &info)
|
||||||
{
|
{
|
||||||
@@ -258,14 +289,17 @@ intel_extreme_init(intel_info &info)
|
|||||||
|
|
||||||
// Determine the amount of "stolen" (ie. reserved by the BIOS) graphics memory
|
// Determine the amount of "stolen" (ie. reserved by the BIOS) graphics memory
|
||||||
// and see if we need to allocate some more.
|
// and see if we need to allocate some more.
|
||||||
// TODO: introduce a settings value which you can use to cut down the memory
|
// TODO: make it allocate the memory on demand!
|
||||||
// requirements, or make it allocate the memory on demand!
|
|
||||||
|
size_t totalSize = determine_desired_memory_size();
|
||||||
|
|
||||||
size_t stolenSize = determine_stolen_memory_size(info);
|
size_t stolenSize = determine_stolen_memory_size(info);
|
||||||
dprintf(DEVICE_NAME ": detected %ld MB of stolen memory\n", stolenSize / 1024 / 1024);
|
totalSize = max_c(totalSize, stolenSize);
|
||||||
|
|
||||||
|
dprintf(DEVICE_NAME ": detected %ld MB of stolen memory, reserving %ld MB total\n",
|
||||||
|
stolenSize / 1024 / 1024, totalSize / 1024 / 1024);
|
||||||
|
|
||||||
AreaKeeper additionalMemoryCreator;
|
AreaKeeper additionalMemoryCreator;
|
||||||
size_t totalSize = max_c(8 * 1024 * 1024, stolenSize);
|
|
||||||
uint8 *additionalMemory;
|
uint8 *additionalMemory;
|
||||||
|
|
||||||
if (stolenSize < totalSize) {
|
if (stolenSize < totalSize) {
|
||||||
|
|||||||
Reference in New Issue
Block a user