From 8f53078de4afd8d81854ffb10984d4c335eb6b83 Mon Sep 17 00:00:00 2001 From: Philippe Houdoin Date: Thu, 24 May 2007 21:29:01 +0000 Subject: [PATCH] Added smallest skeletons of future nvidia and radeon OpenGL renderers. For the moment, these two just does a quick check for nvidia or radeon drivers been loaded and running. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21229 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/opengl/Jamfile | 2 + src/add-ons/opengl/nvidia/Jamfile | 24 +++++++++ .../opengl/nvidia/NVidiaHardwareRenderer.cpp | 43 +++++++++++++++ src/add-ons/opengl/radeon/Jamfile | 24 +++++++++ .../opengl/radeon/RadeonHardwareRenderer.cpp | 53 +++++++++++++++++++ 5 files changed, 146 insertions(+) create mode 100644 src/add-ons/opengl/nvidia/Jamfile create mode 100644 src/add-ons/opengl/nvidia/NVidiaHardwareRenderer.cpp create mode 100644 src/add-ons/opengl/radeon/Jamfile create mode 100644 src/add-ons/opengl/radeon/RadeonHardwareRenderer.cpp diff --git a/src/add-ons/opengl/Jamfile b/src/add-ons/opengl/Jamfile index 11b411472f..de38d2b297 100644 --- a/src/add-ons/opengl/Jamfile +++ b/src/add-ons/opengl/Jamfile @@ -1,4 +1,6 @@ SubDir HAIKU_TOP src add-ons opengl ; SubInclude HAIKU_TOP src add-ons opengl mesa_software_renderer ; +# SubInclude HAIKU_TOP src add-ons opengl nvidia ; +# SubInclude HAIKU_TOP src add-ons opengl radeon ; diff --git a/src/add-ons/opengl/nvidia/Jamfile b/src/add-ons/opengl/nvidia/Jamfile new file mode 100644 index 0000000000..404b700851 --- /dev/null +++ b/src/add-ons/opengl/nvidia/Jamfile @@ -0,0 +1,24 @@ +SubDir HAIKU_TOP src add-ons opengl nvidia ; + +SetSubDirSupportedPlatformsBeOSCompatible ; + +if $(TARGET_PLATFORM) != haiku { + UseHeaders [ FDirName $(HAIKU_TOP) headers os opengl ] : true ; + # We need our public GL headers also when not compiling for Haiku. +} + + +UsePrivateHeaders opengl ; + +UseHeaders [ FDirName $(HAIKU_TOP) src kits opengl mesa ] ; +UseHeaders [ FDirName $(HAIKU_TOP) src kits opengl mesa main ] ; +UseHeaders [ FDirName $(HAIKU_TOP) src kits opengl mesa glapi ] ; +UseHeaders [ FDirName $(HAIKU_TOP) src kits opengl mesa tnl ] ; +UseHeaders [ FDirName $(HAIKU_TOP) src kits opengl mesa x86 ] ; +UseHeaders [ FDirName $(HAIKU_TOP) src kits opengl mesa ppc ] ; + +Addon NVidia\ Hardware\ Renderer : opengl : + NVidiaHardwareRenderer.cpp + : false + : libGL.so libmesa.a be +; diff --git a/src/add-ons/opengl/nvidia/NVidiaHardwareRenderer.cpp b/src/add-ons/opengl/nvidia/NVidiaHardwareRenderer.cpp new file mode 100644 index 0000000000..dea5a13b2b --- /dev/null +++ b/src/add-ons/opengl/nvidia/NVidiaHardwareRenderer.cpp @@ -0,0 +1,43 @@ +/* + * Copyright 2006, Haiku. All rights reserved. + * Distributed under the terms of the MIT License. + */ + +#include + +#include +#include + +extern "C" _EXPORT BGLRenderer * +instanciate_gl_renderer(BGLView *view, ulong options, BGLDispatcher *dispatcher) +{ + if (!view) + return NULL; + + BWindow *window = view->Window(); + if (!window) + return NULL; + + BScreen screen(window); + if (!screen.IsValid()) + return NULL; + + accelerant_device_info adi; + if (screen.GetDeviceInfo(&adi) !=B_OK) + return NULL; + + fprintf(stderr, "Accelerant device info:\n" + " version: %ud\n" + " name: %s\n" + " chipset: %s\n" + " serial#: %s\n", (unsigned int) adi.version, adi.name, adi.chipset, adi.serial_no); + flush(stderr); + + // Check the view is attached to a screen driven by a NVidia chip: + if (strncmp(adi.name, "Nvidia", 6) == 0) { + // return new NVidiaHardwareRenderer(view, options, dispatcher); + return NULL; + } + + return NULL; +} diff --git a/src/add-ons/opengl/radeon/Jamfile b/src/add-ons/opengl/radeon/Jamfile new file mode 100644 index 0000000000..54a8ae4034 --- /dev/null +++ b/src/add-ons/opengl/radeon/Jamfile @@ -0,0 +1,24 @@ +SubDir HAIKU_TOP src add-ons opengl radeon ; + +SetSubDirSupportedPlatformsBeOSCompatible ; + +if $(TARGET_PLATFORM) != haiku { + UseHeaders [ FDirName $(HAIKU_TOP) headers os opengl ] : true ; + # We need our public GL headers also when not compiling for Haiku. +} + + +UsePrivateHeaders opengl ; + +UseHeaders [ FDirName $(HAIKU_TOP) src kits opengl mesa ] ; +UseHeaders [ FDirName $(HAIKU_TOP) src kits opengl mesa main ] ; +UseHeaders [ FDirName $(HAIKU_TOP) src kits opengl mesa glapi ] ; +UseHeaders [ FDirName $(HAIKU_TOP) src kits opengl mesa tnl ] ; +UseHeaders [ FDirName $(HAIKU_TOP) src kits opengl mesa x86 ] ; +UseHeaders [ FDirName $(HAIKU_TOP) src kits opengl mesa ppc ] ; + +Addon Radeon\ Hardware\ Renderer : opengl : + RadeonHardwareRenderer.cpp + : false + : libGL.so libmesa.a be +; diff --git a/src/add-ons/opengl/radeon/RadeonHardwareRenderer.cpp b/src/add-ons/opengl/radeon/RadeonHardwareRenderer.cpp new file mode 100644 index 0000000000..01b925af3a --- /dev/null +++ b/src/add-ons/opengl/radeon/RadeonHardwareRenderer.cpp @@ -0,0 +1,53 @@ +/* + * Copyright 2006, Haiku. All rights reserved. + * Distributed under the terms of the MIT License. + */ + + +#include + +#include +#include + +extern "C" _EXPORT BGLRenderer * +instanciate_gl_renderer(BGLView *view, ulong options, BGLDispatcher *dispatcher) +{ + if (!view) { + printf("view = NULL!\n"); + return NULL; + } + + BWindow *window = view->Window(); + if (!window) { + printf("view's window = NULL!\n"); + return NULL; + } + + BScreen screen(window); + if (!screen.IsValid()) { + printf("Failed to get window's screen!\n"); + return NULL; + } + + accelerant_device_info adi; + if (screen.GetDeviceInfo(&adi) != B_OK) { + printf("screen.GetDeviceInfo() failed!\n"); + return NULL; + } + + printf("Accelerant device info:\n" + " version: %ud\n" + " name: %s\n" + " chipset: %s\n" + " serial#: %s\n", (unsigned int) adi.version, adi.name, adi.chipset, adi.serial_no); + + // Check the view is attached to a screen driven by a Radeon chip: + if (strcasecmp(adi.chipset, "radeon") == 0 || + strcasecmp(adi.chipset, "radeon") == 0) { + // return new RadeonHardwareRenderer(view, options, dispatcher); + return NULL; + } + + // We can't be a renderer for this view, sorry. + return NULL; +}