Provide an easy way to drop in a different RS driver.
Change-Id: I2576f0ca20671b1f98e3cbed958fd0b2582bd103
diff --git a/Android.mk b/Android.mk
index 2d4f580..a37020e 100644
--- a/Android.mk
+++ b/Android.mk
@@ -6,6 +6,10 @@
rs_base_CFLAGS += -D__RS_PDK__
endif
+ifneq ($(OVERRIDE_RS_DRIVER),)
+ rs_base_CFLAGS += -DOVERRIDE_RS_DRIVER=$(OVERRIDE_RS_DRIVER)
+endif
+
include $(CLEAR_VARS)
LOCAL_CLANG := true
LOCAL_MODULE := libRSDriver
@@ -164,7 +168,6 @@
LOCAL_CFLAGS += $(rs_base_CFLAGS)
LOCAL_LDLIBS := -lpthread -ldl
-LOCAL_MODULE:= libRS
LOCAL_MODULE_TAGS := optional
include $(BUILD_SHARED_LIBRARY)
diff --git a/rsContext.cpp b/rsContext.cpp
index 803b73d..ea9c406 100644
--- a/rsContext.cpp
+++ b/rsContext.cpp
@@ -221,11 +221,30 @@
rsc->props.mLogVisual = getProp("debug.rs.visual") != 0;
rsc->props.mDebugMaxThreads = getProp("debug.rs.max-threads");
- void *driverSO = dlopen("libRSDriver.so", RTLD_LAZY);
+ void *driverSO = NULL;
+
+ // Provide a mechanism for dropping in a different RS driver.
+#ifdef OVERRIDE_RS_DRIVER
+#define XSTR(S) #S
+#define STR(S) XSTR(S)
+#define OVERRIDE_RS_DRIVER_STRING STR(OVERRIDE_RS_DRIVER)
+ driverSO = dlopen(OVERRIDE_RS_DRIVER_STRING, RTLD_LAZY);
if (driverSO == NULL) {
- rsc->setError(RS_ERROR_FATAL_DRIVER, "Failed loading RS driver");
- ALOGE("Failed loading RS driver: %s", dlerror());
- return NULL;
+ ALOGE("Failed loading %s: %s", OVERRIDE_RS_DRIVER_STRING, dlerror());
+ // Continue to attempt loading fallback driver
+ }
+#undef XSTR
+#undef STR
+#endif // OVERRIDE_RS_DRIVER
+
+ // Attempt to load the reference RS driver (if necessary).
+ if (driverSO == NULL) {
+ driverSO = dlopen("libRSDriver.so", RTLD_LAZY);
+ if (driverSO == NULL) {
+ rsc->setError(RS_ERROR_FATAL_DRIVER, "Failed loading RS driver");
+ ALOGE("Failed loading RS driver: %s", dlerror());
+ return NULL;
+ }
}
// Need to call dlerror() to clear buffer before using it for dlsym().