Implement IO_OUTPUT + SurfaceTexture

Change-Id: Id96fecd6d768196523330c5eda77c4ee86b9bd3c
diff --git a/driver/rsdShader.cpp b/driver/rsdShader.cpp
index 6d9fa90..d39bdb8 100644
--- a/driver/rsdShader.cpp
+++ b/driver/rsdShader.cpp
@@ -480,23 +480,28 @@
         }
 
         DrvAllocation *drvTex = (DrvAllocation *)mRSProgram->mHal.state.textures[ct]->mHal.drv;
-        if (drvTex->glTarget != GL_TEXTURE_2D &&
-            drvTex->glTarget != GL_TEXTURE_CUBE_MAP &&
-            drvTex->glTarget != GL_TEXTURE_EXTERNAL_OES) {
+
+        if (mCurrentState->mTextureTargets[ct] != GL_TEXTURE_2D &&
+            mCurrentState->mTextureTargets[ct] != GL_TEXTURE_CUBE_MAP &&
+            mCurrentState->mTextureTargets[ct] != GL_TEXTURE_EXTERNAL_OES) {
             ALOGE("Attempting to bind unknown texture to shader id %u, texture unit %u",
                   (uint)this, ct);
             rsc->setError(RS_ERROR_BAD_SHADER, "Non-texture allocation bound to a shader");
         }
-        RSD_CALL_GL(glBindTexture, drvTex->glTarget, drvTex->textureID);
+        RSD_CALL_GL(glBindTexture, mCurrentState->mTextureTargets[ct], drvTex->textureID);
         rsdGLCheckError(rsc, "ProgramFragment::setup tex bind");
         if (mRSProgram->mHal.state.samplers[ct]) {
             setupSampler(rsc, mRSProgram->mHal.state.samplers[ct],
                          mRSProgram->mHal.state.textures[ct]);
         } else {
-            RSD_CALL_GL(glTexParameteri, drvTex->glTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-            RSD_CALL_GL(glTexParameteri, drvTex->glTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-            RSD_CALL_GL(glTexParameteri, drvTex->glTarget, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-            RSD_CALL_GL(glTexParameteri, drvTex->glTarget, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+            RSD_CALL_GL(glTexParameteri, mCurrentState->mTextureTargets[ct],
+                GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+            RSD_CALL_GL(glTexParameteri, mCurrentState->mTextureTargets[ct],
+                GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+            RSD_CALL_GL(glTexParameteri, mCurrentState->mTextureTargets[ct],
+                GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+            RSD_CALL_GL(glTexParameteri, mCurrentState->mTextureTargets[ct],
+                GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
             rsdGLCheckError(rsc, "ProgramFragment::setup tex env");
         }
         rsdGLCheckError(rsc, "ProgramFragment::setup uniforms");