Start splitting allocation into hal and core.

Change-Id: Ic506abb0469238cb0471eb1401cfcb7b2fbbe4bb
diff --git a/libs/rs/driver/rsdProgram.cpp b/libs/rs/driver/rsdProgram.cpp
index 502c5ee..39b3805 100644
--- a/libs/rs/driver/rsdProgram.cpp
+++ b/libs/rs/driver/rsdProgram.cpp
@@ -16,6 +16,7 @@
 
 
 #include "rsdCore.h"
+#include "rsdAllocation.h"
 #include "rsdProgramVertex.h"
 #include "rsdShader.h"
 #include "rsdShaderCache.h"
@@ -40,9 +41,20 @@
     return drv->createShader();
 }
 
+static void SyncProgramConstants(const Context *rsc, const Program *p) {
+    for (uint32_t ct=0; ct < p->mHal.state.texturesCount; ct++) {
+        const Allocation *a = p->mHal.state.textures[ct].get();
+        DrvAllocation *drvAlloc = (DrvAllocation *)a->mHal.drv;
+        if (drvAlloc->uploadDeferred) {
+            rsdAllocationSyncAll(rsc, a, RS_ALLOCATION_USAGE_SCRIPT);
+        }
+    }
+}
+
 void rsdProgramVertexSetActive(const Context *rsc, const ProgramVertex *pv) {
     RsdHal *dc = (RsdHal *)rsc->mHal.drv;
 
+    SyncProgramConstants(rsc, pv);
     dc->gl.shaderCache->setActiveVertex((RsdShader*)pv->mHal.drv);
 }
 
@@ -73,6 +85,7 @@
 void rsdProgramFragmentSetActive(const Context *rsc, const ProgramFragment *pf) {
     RsdHal *dc = (RsdHal *)rsc->mHal.drv;
 
+    SyncProgramConstants(rsc, pf);
     dc->gl.shaderCache->setActiveFragment((RsdShader*)pf->mHal.drv);
 }