RenderTarget11 now stores a shader resource.

TRAC #22358

Signed-off-by: Nicolas Capens
Signed-off-by: Shannon Woods
Author: Geoff Lang

git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1744 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/renderer/TextureStorage11.cpp b/src/libGLESv2/renderer/TextureStorage11.cpp
index 5afe418..43a3a04 100644
--- a/src/libGLESv2/renderer/TextureStorage11.cpp
+++ b/src/libGLESv2/renderer/TextureStorage11.cpp
@@ -265,7 +265,23 @@
             }
             ASSERT(SUCCEEDED(result));
 
-            mRenderTarget[level] = new RenderTarget11(mRenderer, rtv,
+            D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
+            srvDesc.Format = mTextureFormat;
+            srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
+            srvDesc.Texture2D.MostDetailedMip = level;
+            srvDesc.Texture2D.MipLevels = 1;
+
+            ID3D11ShaderResourceView *srv;
+            result = device->CreateShaderResourceView(mTexture, &srvDesc, &srv);
+
+            if (result == E_OUTOFMEMORY)
+            {
+                rtv->Release();
+                return error(GL_OUT_OF_MEMORY, static_cast<RenderTarget*>(NULL));
+            }
+            ASSERT(SUCCEEDED(result));
+
+            mRenderTarget[level] = new RenderTarget11(mRenderer, rtv, srv,
                                                       std::max(mTextureWidth >> level, 1U),
                                                       std::max(mTextureHeight >> level, 1U));
         }
@@ -430,7 +446,25 @@
                 }
                 ASSERT(SUCCEEDED(result));
 
-                mRenderTarget[faceIdx][level] = new RenderTarget11(mRenderer, rtv,
+                D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
+                srvDesc.Format = mTextureFormat;
+                srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY;
+                srvDesc.Texture2DArray.MostDetailedMip = level;
+                srvDesc.Texture2DArray.MipLevels = 1;
+                srvDesc.Texture2DArray.FirstArraySlice = faceIdx;
+                srvDesc.Texture2DArray.ArraySize = 1;
+
+                ID3D11ShaderResourceView *srv;
+                result = device->CreateShaderResourceView(mTexture, &srvDesc, &srv);
+
+                if (result == E_OUTOFMEMORY)
+                {
+                    rtv->Release();
+                    return error(GL_OUT_OF_MEMORY, static_cast<RenderTarget*>(NULL));
+                }
+                ASSERT(SUCCEEDED(result));
+
+                mRenderTarget[faceIdx][level] = new RenderTarget11(mRenderer, rtv, srv,
                                                                    std::max(mTextureWidth >> level, 1U),
                                                                    std::max(mTextureHeight >> level, 1U));
             }