Move SetTexture calls to the renderer class

Trac #21727

git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1337 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index cd3f7dd..6274e43 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -2415,13 +2415,11 @@
 
     int samplerCount = (type == SAMPLER_PIXEL) ? MAX_TEXTURE_IMAGE_UNITS : MAX_VERTEX_TEXTURE_IMAGE_UNITS_VTF;   // Range of Direct3D 9 samplers of given sampler type
     unsigned int *appliedTextureSerial = (type == SAMPLER_PIXEL) ? mAppliedTextureSerialPS : mAppliedTextureSerialVS;
-    int d3dSamplerOffset = (type == SAMPLER_PIXEL) ? 0 : D3DVERTEXTEXTURESAMPLER0;
     int samplerRange = programBinary->getUsedSamplerRange(type);
 
     for (int samplerIndex = 0; samplerIndex < samplerRange; samplerIndex++)
     {
         int textureUnit = programBinary->getSamplerMapping(type, samplerIndex);   // OpenGL texture image unit index
-        int d3dSampler = samplerIndex + d3dSamplerOffset;
 
         if (textureUnit != -1)
         {
@@ -2432,9 +2430,7 @@
 
             if (appliedTextureSerial[samplerIndex] != texSerial || texture->hasDirtyParameters() || texture->hasDirtyImages())
             {
-                IDirect3DBaseTexture9 *d3dTexture = texture->getTexture();
-
-                if (d3dTexture)
+                if (texture->isSamplerComplete())
                 {
                     if (appliedTextureSerial[samplerIndex] != texSerial || texture->hasDirtyParameters())
                     {
@@ -2446,12 +2442,12 @@
 
                     if (appliedTextureSerial[samplerIndex] != texSerial || texture->hasDirtyImages())
                     {
-                        mDevice->SetTexture(d3dSampler, d3dTexture);
+                        mRenderer->setTexture(type, samplerIndex, texture);
                     }
                 }
                 else
                 {
-                    mDevice->SetTexture(d3dSampler, getIncompleteTexture(textureType)->getTexture());
+                    mRenderer->setTexture(type, samplerIndex, getIncompleteTexture(textureType));
                 }
 
                 appliedTextureSerial[samplerIndex] = texSerial;
@@ -2462,7 +2458,7 @@
         {
             if (appliedTextureSerial[samplerIndex] != 0)
             {
-                mDevice->SetTexture(d3dSampler, NULL);
+                mRenderer->setTexture(type, samplerIndex, NULL);
                 appliedTextureSerial[samplerIndex] = 0;
             }
         }
@@ -2472,7 +2468,7 @@
     {
         if (appliedTextureSerial[samplerIndex] != 0)
         {
-            mDevice->SetTexture(samplerIndex + d3dSamplerOffset, NULL);
+            mRenderer->setTexture(type, samplerIndex, NULL);
             appliedTextureSerial[samplerIndex] = 0;
         }
     }
diff --git a/src/libGLESv2/Texture.cpp b/src/libGLESv2/Texture.cpp
index 8a244ce..e491d78 100644
--- a/src/libGLESv2/Texture.cpp
+++ b/src/libGLESv2/Texture.cpp
@@ -1550,13 +1550,9 @@
     return true;
 }
 
-IDirect3DBaseTexture9 *Texture::getTexture()
+// D3D9_REPLACE
+IDirect3DBaseTexture9 *Texture::getD3DTexture()
 {
-    if (!isSamplerComplete())
-    {
-        return NULL;
-    }
-
     // ensure the underlying texture is created
     if (getStorage(false) == NULL)
     {
diff --git a/src/libGLESv2/Texture.h b/src/libGLESv2/Texture.h
index 27f2d75..f65bba5 100644
--- a/src/libGLESv2/Texture.h
+++ b/src/libGLESv2/Texture.h
@@ -206,7 +206,7 @@
 
     virtual bool isSamplerComplete() const = 0;
 
-    IDirect3DBaseTexture9 *getTexture();
+    IDirect3DBaseTexture9 *getD3DTexture();  // D3D9_REPLACE
     virtual Renderbuffer *getRenderbuffer(GLenum target) = 0;
 
     virtual void generateMipmaps() = 0;
diff --git a/src/libGLESv2/renderer/Renderer.cpp b/src/libGLESv2/renderer/Renderer.cpp
index a6b75d7..1b5f5d8 100644
--- a/src/libGLESv2/renderer/Renderer.cpp
+++ b/src/libGLESv2/renderer/Renderer.cpp
@@ -381,6 +381,24 @@
     }
 }
 
+void Renderer::setTexture(gl::SamplerType type, int index, gl::Texture *texture)
+{
+    int d3dSamplerOffset = (type == gl::SAMPLER_PIXEL) ? 0 : D3DVERTEXTEXTURESAMPLER0;
+    int d3dSampler = index + d3dSamplerOffset;
+    IDirect3DBaseTexture9 *d3dTexture = NULL;
+
+    if (texture)
+    {
+        d3dTexture = texture->getD3DTexture();
+        // If we get NULL back from getTexture here, something went wrong
+        // in the texture class and we're unexpectedly missing the d3d texture
+        ASSERT(d3dTexture != NULL);
+    }
+
+    mDevice->SetTexture(d3dSampler, d3dTexture);
+}
+
+
 void Renderer::releaseDeviceResources()
 {
     while (!mEventQueryPool.empty())
diff --git a/src/libGLESv2/renderer/Renderer.h b/src/libGLESv2/renderer/Renderer.h
index d0eefd7..6bc4b7e 100644
--- a/src/libGLESv2/renderer/Renderer.h
+++ b/src/libGLESv2/renderer/Renderer.h
@@ -74,13 +74,13 @@
     virtual void *createVertexbuffer();
 
     // state setup
-    virtual void applyTexture();
     virtual void applyShaders();
     virtual void applyConstants();
     virtual void applyRenderTargets();
     virtual void applyState();
 #endif
     virtual void setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &sampler);
+    virtual void setTexture(gl::SamplerType type, int index, gl::Texture *texture);
 
     // lost device
     virtual void markDeviceLost();