Merge "[RenderScript] Use OVERRIDE_RS_DRIVER string in the default implementation."
diff --git a/renderscript/1.0/default/Android.bp b/renderscript/1.0/default/Android.bp
index c4bd1b3..b996969 100644
--- a/renderscript/1.0/default/Android.bp
+++ b/renderscript/1.0/default/Android.bp
@@ -18,4 +18,11 @@
         "libutils",
         "android.hardware.renderscript@1.0",
     ],
+
+    product_variables: {
+        override_rs_driver: {
+            cflags: ["-DOVERRIDE_RS_DRIVER=%s"],
+        },
+    },
+
 }
diff --git a/renderscript/1.0/default/Context.cpp b/renderscript/1.0/default/Context.cpp
index 389b6e7..c2d7507 100644
--- a/renderscript/1.0/default/Context.cpp
+++ b/renderscript/1.0/default/Context.cpp
@@ -16,7 +16,19 @@
     uint32_t _sdkVersion = sdkVersion;
     RsContextType _ct = static_cast<RsContextType>(ct);
     int32_t _flags = flags;
-    mContext = Device::getHal().ContextCreate(_dev, _version, _sdkVersion, _ct, _flags);
+    const char* driverName = nullptr;
+
+#ifdef OVERRIDE_RS_DRIVER
+#define XSTR(S) #S
+#define STR(S) XSTR(S)
+#define OVERRIDE_RS_DRIVER_STRING STR(OVERRIDE_RS_DRIVER)
+    static std::string driverString(OVERRIDE_RS_DRIVER_STRING);
+    driverName = driverString.c_str();
+#undef XSTR
+#undef STR
+#endif  // OVERRIDE_RS_DRIVER
+    mContext =
+        Device::getHal().ContextCreateVendor(_dev, _version, _sdkVersion, _ct, _flags, driverName);
 }
 
 
diff --git a/renderscript/1.0/default/Device.cpp b/renderscript/1.0/default/Device.cpp
index 86cf8eb..406602e 100644
--- a/renderscript/1.0/default/Device.cpp
+++ b/renderscript/1.0/default/Device.cpp
@@ -42,27 +42,39 @@
     void* handle = dlopen(filename, RTLD_LAZY | RTLD_LOCAL);
 
     dispatchTable dispatchHal = {
-        .SetNativeLibDir = (SetNativeLibDirFnPtr)nullptr,
+        .SetNativeLibDir = (SetNativeLibDirFnPtr) nullptr,
 
         .Allocation1DData = (Allocation1DDataFnPtr)dlsym(handle, "rsAllocation1DData"),
-        .Allocation1DElementData = (Allocation1DElementDataFnPtr)nullptr,
+        .Allocation1DElementData = (Allocation1DElementDataFnPtr) nullptr,
         .Allocation1DRead = (Allocation1DReadFnPtr)dlsym(handle, "rsAllocation1DRead"),
         .Allocation2DData = (Allocation2DDataFnPtr)dlsym(handle, "rsAllocation2DData"),
         .Allocation2DRead = (Allocation2DReadFnPtr)dlsym(handle, "rsAllocation2DRead"),
         .Allocation3DData = (Allocation3DDataFnPtr)dlsym(handle, "rsAllocation3DData"),
         .Allocation3DRead = (Allocation3DReadFnPtr)dlsym(handle, "rsAllocation3DRead"),
-        .AllocationAdapterCreate = (AllocationAdapterCreateFnPtr)dlsym(handle, "rsAllocationAdapterCreate"),
-        .AllocationAdapterOffset = (AllocationAdapterOffsetFnPtr)dlsym(handle, "rsAllocationAdapterOffset"),
-        .AllocationCopy2DRange = (AllocationCopy2DRangeFnPtr)dlsym(handle, "rsAllocationCopy2DRange"),
-        .AllocationCopy3DRange = (AllocationCopy3DRangeFnPtr)dlsym(handle, "rsAllocationCopy3DRange"),
-        .AllocationCopyToBitmap = (AllocationCopyToBitmapFnPtr)dlsym(handle, "rsAllocationCopyToBitmap"),
-        .AllocationCreateFromBitmap = (AllocationCreateFromBitmapFnPtr)dlsym(handle, "rsAllocationCreateFromBitmap"),
-        .AllocationCreateStrided = (AllocationCreateStridedFnPtr)dlsym(handle, "rsAllocationCreateStrided"),
-        .AllocationCreateTyped = (AllocationCreateTypedFnPtr)dlsym(handle, "rsAllocationCreateTyped"),
-        .AllocationCubeCreateFromBitmap = (AllocationCubeCreateFromBitmapFnPtr)dlsym(handle, "rsAllocationCubeCreateFromBitmap"),
-        .AllocationElementData = (AllocationElementDataFnPtr)dlsym(handle, "rsAllocationElementData"),
-        .AllocationElementRead = (AllocationElementReadFnPtr)dlsym(handle, "rsAllocationElementRead"),
-        .AllocationGenerateMipmaps = (AllocationGenerateMipmapsFnPtr)dlsym(handle, "rsAllocationGenerateMipmaps"),
+        .AllocationAdapterCreate =
+            (AllocationAdapterCreateFnPtr)dlsym(handle, "rsAllocationAdapterCreate"),
+        .AllocationAdapterOffset =
+            (AllocationAdapterOffsetFnPtr)dlsym(handle, "rsAllocationAdapterOffset"),
+        .AllocationCopy2DRange =
+            (AllocationCopy2DRangeFnPtr)dlsym(handle, "rsAllocationCopy2DRange"),
+        .AllocationCopy3DRange =
+            (AllocationCopy3DRangeFnPtr)dlsym(handle, "rsAllocationCopy3DRange"),
+        .AllocationCopyToBitmap =
+            (AllocationCopyToBitmapFnPtr)dlsym(handle, "rsAllocationCopyToBitmap"),
+        .AllocationCreateFromBitmap =
+            (AllocationCreateFromBitmapFnPtr)dlsym(handle, "rsAllocationCreateFromBitmap"),
+        .AllocationCreateStrided =
+            (AllocationCreateStridedFnPtr)dlsym(handle, "rsAllocationCreateStrided"),
+        .AllocationCreateTyped =
+            (AllocationCreateTypedFnPtr)dlsym(handle, "rsAllocationCreateTyped"),
+        .AllocationCubeCreateFromBitmap =
+            (AllocationCubeCreateFromBitmapFnPtr)dlsym(handle, "rsAllocationCubeCreateFromBitmap"),
+        .AllocationElementData =
+            (AllocationElementDataFnPtr)dlsym(handle, "rsAllocationElementData"),
+        .AllocationElementRead =
+            (AllocationElementReadFnPtr)dlsym(handle, "rsAllocationElementRead"),
+        .AllocationGenerateMipmaps =
+            (AllocationGenerateMipmapsFnPtr)dlsym(handle, "rsAllocationGenerateMipmaps"),
         .AllocationGetPointer = (AllocationGetPointerFnPtr)dlsym(handle, "rsAllocationGetPointer"),
         .AllocationGetSurface = (AllocationGetSurfaceFnPtr)dlsym(handle, "rsAllocationGetSurface"),
         .AllocationGetType = (AllocationGetTypeFnPtr)dlsym(handle, "rsaAllocationGetType"),
@@ -71,15 +83,18 @@
         .AllocationRead = (AllocationReadFnPtr)dlsym(handle, "rsAllocationRead"),
         .AllocationResize1D = (AllocationResize1DFnPtr)dlsym(handle, "rsAllocationResize1D"),
         .AllocationSetSurface = (AllocationSetSurfaceFnPtr)dlsym(handle, "rsAllocationSetSurface"),
-        .AllocationSetupBufferQueue = (AllocationSetupBufferQueueFnPtr)dlsym(handle, "rsAllocationSetupBufferQueue"),
-        .AllocationShareBufferQueue = (AllocationShareBufferQueueFnPtr)dlsym(handle, "rsAllocationShareBufferQueue"),
+        .AllocationSetupBufferQueue =
+            (AllocationSetupBufferQueueFnPtr)dlsym(handle, "rsAllocationSetupBufferQueue"),
+        .AllocationShareBufferQueue =
+            (AllocationShareBufferQueueFnPtr)dlsym(handle, "rsAllocationShareBufferQueue"),
         .AllocationSyncAll = (AllocationSyncAllFnPtr)dlsym(handle, "rsAllocationSyncAll"),
         .AssignName = (AssignNameFnPtr)dlsym(handle, "rsAssignName"),
         .ClosureCreate = (ClosureCreateFnPtr)dlsym(handle, "rsClosureCreate"),
         .ClosureSetArg = (ClosureSetArgFnPtr)dlsym(handle, "rsClosureSetArg"),
         .ClosureSetGlobal = (ClosureSetGlobalFnPtr)dlsym(handle, "rsClosureSetGlobal"),
-        .ContextCreate = (ContextCreateFnPtr)dlsym(handle, "rsContextCreate"),
-        .ContextDeinitToClient = (ContextDeinitToClientFnPtr)dlsym(handle, "rsContextDeinitToClient"),
+        .ContextCreateVendor = (ContextCreateVendorFnPtr)dlsym(handle, "rsContextCreateVendor"),
+        .ContextDeinitToClient =
+            (ContextDeinitToClientFnPtr)dlsym(handle, "rsContextDeinitToClient"),
         .ContextDestroy = (ContextDestroyFnPtr)dlsym(handle, "rsContextDestroy"),
         .ContextDump = (ContextDumpFnPtr)dlsym(handle, "rsContextDump"),
         .ContextFinish = (ContextFinishFnPtr)dlsym(handle, "rsContextFinish"),
@@ -89,13 +104,14 @@
         .ContextSendMessage = (ContextSendMessageFnPtr)dlsym(handle, "rsContextSendMessage"),
         .ContextSetCacheDir = (ContextSetCacheDirFnPtr)dlsym(handle, "rsContextSetCacheDir"),
         .ContextSetPriority = (ContextSetPriorityFnPtr)dlsym(handle, "rsContextSetPriority"),
-        .DeviceCreate = (DeviceCreateFnPtr)nullptr,
-        .DeviceDestroy = (DeviceDestroyFnPtr)nullptr,
-        .DeviceSetConfig = (DeviceSetConfigFnPtr)nullptr,
+        .DeviceCreate = (DeviceCreateFnPtr) nullptr,
+        .DeviceDestroy = (DeviceDestroyFnPtr) nullptr,
+        .DeviceSetConfig = (DeviceSetConfigFnPtr) nullptr,
         .ElementCreate2 = (ElementCreate2FnPtr)dlsym(handle, "rsElementCreate2"),
         .ElementCreate = (ElementCreateFnPtr)dlsym(handle, "rsElementCreate"),
         .ElementGetNativeData = (ElementGetNativeDataFnPtr)dlsym(handle, "rsaElementGetNativeData"),
-        .ElementGetSubElements = (ElementGetSubElementsFnPtr)dlsym(handle, "rsaElementGetSubElements"),
+        .ElementGetSubElements =
+            (ElementGetSubElementsFnPtr)dlsym(handle, "rsaElementGetSubElements"),
         .GetName = (GetNameFnPtr)dlsym(handle, "rsaGetName"),
         .InvokeClosureCreate = (InvokeClosureCreateFnPtr)dlsym(handle, "rsInvokeClosureCreate"),
         .ObjDestroy = (ObjDestroyFnPtr)dlsym(handle, "rsObjDestroy"),
@@ -103,7 +119,7 @@
         .ScriptBindAllocation = (ScriptBindAllocationFnPtr)dlsym(handle, "rsScriptBindAllocation"),
         .ScriptCCreate = (ScriptCCreateFnPtr)dlsym(handle, "rsScriptCCreate"),
         .ScriptFieldIDCreate = (ScriptFieldIDCreateFnPtr)dlsym(handle, "rsScriptFieldIDCreate"),
-        .ScriptForEach = (ScriptForEachFnPtr)nullptr,
+        .ScriptForEach = (ScriptForEachFnPtr) nullptr,
         .ScriptForEachMulti = (ScriptForEachMultiFnPtr)dlsym(handle, "rsScriptForEachMulti"),
         .ScriptGetVarV = (ScriptGetVarVFnPtr)dlsym(handle, "rsScriptGetVarV"),
         .ScriptGroup2Create = (ScriptGroup2CreateFnPtr)dlsym(handle, "rsScriptGroup2Create"),
@@ -111,7 +127,8 @@
         .ScriptGroupExecute = (ScriptGroupExecuteFnPtr)dlsym(handle, "rsScriptGroupExecute"),
         .ScriptGroupSetInput = (ScriptGroupSetInputFnPtr)dlsym(handle, "rsScriptGroupSetInput"),
         .ScriptGroupSetOutput = (ScriptGroupSetOutputFnPtr)dlsym(handle, "rsScriptGroupSetOutput"),
-        .ScriptIntrinsicCreate = (ScriptIntrinsicCreateFnPtr)dlsym(handle, "rsScriptIntrinsicCreate"),
+        .ScriptIntrinsicCreate =
+            (ScriptIntrinsicCreateFnPtr)dlsym(handle, "rsScriptIntrinsicCreate"),
         .ScriptInvoke = (ScriptInvokeFnPtr)dlsym(handle, "rsScriptInvoke"),
         .ScriptInvokeIDCreate = (ScriptInvokeIDCreateFnPtr)dlsym(handle, "rsScriptInvokeIDCreate"),
         .ScriptInvokeV = (ScriptInvokeVFnPtr)dlsym(handle, "rsScriptInvokeV"),