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/libEGL/Display.cpp b/src/libEGL/Display.cpp
index cfeecb0..4cdb255 100644
--- a/src/libEGL/Display.cpp
+++ b/src/libEGL/Display.cpp
@@ -113,6 +113,7 @@
}
initExtensionString();
+ initVendorString();
return true;
}
@@ -520,5 +521,24 @@
return mExtensionString.c_str();
}
+void Display::initVendorString()
+{
+ mVendorString = "Google Inc.";
+
+ LUID adapterLuid = {0};
+
+ if (mRenderer && mRenderer->getLUID(&adapterLuid))
+ {
+ char adapterLuidString[64];
+ sprintf_s(adapterLuidString, sizeof(adapterLuidString), " (adapter LUID: %08x%08x)", adapterLuid.HighPart, adapterLuid.LowPart);
+
+ mVendorString += adapterLuidString;
+ }
+}
+
+const char *Display::getVendorString() const
+{
+ return mVendorString.c_str();
+}
}
diff --git a/src/libEGL/Display.h b/src/libEGL/Display.h
index 4ef5e60..6f1c65f 100644
--- a/src/libEGL/Display.h
+++ b/src/libEGL/Display.h
@@ -60,6 +60,7 @@
virtual void recreateSwapChains();
const char *getExtensionString() const;
+ const char *getVendorString() const;
private:
DISALLOW_COPY_AND_ASSIGN(Display);
@@ -84,7 +85,9 @@
rx::Renderer *mRenderer;
void initExtensionString();
+ void initVendorString();
std::string mExtensionString;
+ std::string mVendorString;
};
}
diff --git a/src/libEGL/libEGL.cpp b/src/libEGL/libEGL.cpp
index d1aec75..48b9066 100644
--- a/src/libEGL/libEGL.cpp
+++ b/src/libEGL/libEGL.cpp
@@ -180,9 +180,9 @@
case EGL_CLIENT_APIS:
return egl::success("OpenGL_ES");
case EGL_EXTENSIONS:
- return display->getExtensionString();
+ return egl::success(display->getExtensionString());
case EGL_VENDOR:
- return egl::success("Google Inc.");
+ return egl::success(display->getVendorString());
case EGL_VERSION:
return egl::success("1.4 (ANGLE " VERSION_STRING ")");
}
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);