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: [email protected]
git-svn-id: http://angleproject.googlecode.com/svn/branches/dx11proto@2253 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libEGL/Display.cpp b/src/libEGL/Display.cpp
index 73dc3c5..8f2af79 100644
--- a/src/libEGL/Display.cpp
+++ b/src/libEGL/Display.cpp
@@ -113,6 +113,7 @@
}
initExtensionString();
+ initVendorString();
return true;
}
@@ -513,5 +514,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 8e83b1c..58c3940 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 7fca456..bcba43f 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 2132c71..04e877b 100644
--- a/src/libGLESv2/renderer/Renderer.h
+++ b/src/libGLESv2/renderer/Renderer.h
@@ -225,6 +225,8 @@
virtual QueryImpl *createQuery(GLenum type) = 0;
virtual FenceImpl *createFence() = 0;
+ 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 d54af15..e7fe03a 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -3491,4 +3491,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 719eb1f..b3b742c 100644
--- a/src/libGLESv2/renderer/Renderer11.h
+++ b/src/libGLESv2/renderer/Renderer11.h
@@ -182,6 +182,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 525f68f..696bcca 100644
--- a/src/libGLESv2/renderer/Renderer9.cpp
+++ b/src/libGLESv2/renderer/Renderer9.cpp
@@ -3187,4 +3187,18 @@
return new TextureStorage9_Cube(this, levels, internalformat, usage, forceRenderable, size);
}
-}
\ No newline at end of file
+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 527a501..2873e61 100644
--- a/src/libGLESv2/renderer/Renderer9.h
+++ b/src/libGLESv2/renderer/Renderer9.h
@@ -193,6 +193,8 @@
D3DPOOL getTexturePool(DWORD usage) const;
+ virtual bool getLUID(LUID *adapterLuid) const;
+
private:
DISALLOW_COPY_AND_ASSIGN(Renderer9);