Add adapter LUID to EGL vendor string.

This is so Chrome can create another D3D device on the same adapter that can
share resources with ANGLE's D3D device.
Review URL: https://codereview.appspot.com/9225046
SVN URL: https://code.google.com/p/angleproject/source/detail?r=2210
TRAC #23166

Signed-off-by: Shannon Woods
Signed-off-by: Geoff Lang
Merged-by: Jamie Madill
Author: apatrick@chromium.org

git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2367 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/renderer/Renderer.h b/src/libGLESv2/renderer/Renderer.h
index e93de39..e37c966 100644
--- a/src/libGLESv2/renderer/Renderer.h
+++ b/src/libGLESv2/renderer/Renderer.h
@@ -254,6 +254,8 @@
     void setCurrentClientVersion(int clientVersion) { mCurrentClientVersion = clientVersion; }
     int getCurrentClientVersion() const { return mCurrentClientVersion; }
 
+    virtual bool getLUID(LUID *adapterLuid) const = 0;
+
   protected:
     bool initializeCompiler();
     ShaderBlob *compileToBinary(gl::InfoLog &infoLog, const char *hlsl, const char *profile, UINT optimizationFlags, bool alternateFlags);
diff --git a/src/libGLESv2/renderer/Renderer11.cpp b/src/libGLESv2/renderer/Renderer11.cpp
index 6b8d771..b704c10 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -4012,4 +4012,24 @@
     }
 }
 
+bool Renderer11::getLUID(LUID *adapterLuid) const
+{
+    adapterLuid->HighPart = 0;
+    adapterLuid->LowPart = 0;
+
+    if (!mDxgiAdapter)
+    {
+        return false;
+    }
+
+    DXGI_ADAPTER_DESC adapterDesc;
+    if (FAILED(mDxgiAdapter->GetDesc(&adapterDesc)))
+    {
+        return false;
+    }
+
+    *adapterLuid = adapterDesc.AdapterLuid;
+    return true;
+}
+
 }
diff --git a/src/libGLESv2/renderer/Renderer11.h b/src/libGLESv2/renderer/Renderer11.h
index db375ef..3e8b456 100644
--- a/src/libGLESv2/renderer/Renderer11.h
+++ b/src/libGLESv2/renderer/Renderer11.h
@@ -205,6 +205,8 @@
     void unapplyRenderTargets();
     void setOneTimeRenderTarget(ID3D11RenderTargetView *renderTargetView);
 
+    virtual bool getLUID(LUID *adapterLuid) const;
+
   private:
     DISALLOW_COPY_AND_ASSIGN(Renderer11);
 
diff --git a/src/libGLESv2/renderer/Renderer9.cpp b/src/libGLESv2/renderer/Renderer9.cpp
index 7e48c4b..af38a66 100644
--- a/src/libGLESv2/renderer/Renderer9.cpp
+++ b/src/libGLESv2/renderer/Renderer9.cpp
@@ -3308,4 +3308,18 @@
     return NULL;
 }
 
+bool Renderer9::getLUID(LUID *adapterLuid) const
+{
+    adapterLuid->HighPart = 0;
+    adapterLuid->LowPart = 0;
+
+    if (mD3d9Ex)
+    {
+        mD3d9Ex->GetAdapterLUID(mAdapter, adapterLuid);
+        return true;
+    }
+
+    return false;
+}
+
 }
diff --git a/src/libGLESv2/renderer/Renderer9.h b/src/libGLESv2/renderer/Renderer9.h
index a65f0f5..16911df 100644
--- a/src/libGLESv2/renderer/Renderer9.h
+++ b/src/libGLESv2/renderer/Renderer9.h
@@ -215,6 +215,8 @@
 
     D3DPOOL getTexturePool(DWORD usage) const;
 
+    virtual bool getLUID(LUID *adapterLuid) const;
+
   private:
     DISALLOW_COPY_AND_ASSIGN(Renderer9);