Commit 6238e353 by Geoff Lang

Generate the egl Display extensions in Renderer9 and Renderer11.

With the addition of EGL Image, the display extensions generated by Renderer9 and Renderer11 become significantly different. Instead of generating them via getXSupport() methods, generate them inside the renderers themselves. BUG=angleproject:970 Change-Id: Ib3fffabcca3e3cdef13ef994aa0b06dba0f00362 Reviewed-on: https://chromium-review.googlesource.com/293271Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Tested-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent bbc02470
...@@ -312,31 +312,7 @@ bool DisplayD3D::isValidNativeWindow(EGLNativeWindowType window) const ...@@ -312,31 +312,7 @@ bool DisplayD3D::isValidNativeWindow(EGLNativeWindowType window) const
void DisplayD3D::generateExtensions(egl::DisplayExtensions *outExtensions) const void DisplayD3D::generateExtensions(egl::DisplayExtensions *outExtensions) const
{ {
outExtensions->createContextRobustness = true; mRenderer->generateDisplayExtensions(outExtensions);
// ANGLE-specific extensions
if (mRenderer->getShareHandleSupport())
{
outExtensions->d3dShareHandleClientBuffer = true;
outExtensions->surfaceD3DTexture2DShareHandle = true;
}
if (mRenderer->getKeyedMutexSupport())
{
outExtensions->keyedMutex = true;
}
outExtensions->querySurfacePointer = true;
outExtensions->windowFixedSize = true;
if (mRenderer->getPostSubBufferSupport())
{
outExtensions->postSubBuffer = true;
}
outExtensions->createContext = true;
outExtensions->deviceQuery = true;
} }
std::string DisplayD3D::getVendorString() const std::string DisplayD3D::getVendorString() const
......
...@@ -92,6 +92,7 @@ class RendererD3D : public Renderer, public BufferFactoryD3D ...@@ -92,6 +92,7 @@ class RendererD3D : public Renderer, public BufferFactoryD3D
virtual egl::Error initialize() = 0; virtual egl::Error initialize() = 0;
virtual egl::ConfigSet generateConfigs() const = 0; virtual egl::ConfigSet generateConfigs() const = 0;
virtual void generateDisplayExtensions(egl::DisplayExtensions *outExtensions) const = 0;
gl::Error drawArrays(const gl::Data &data, gl::Error drawArrays(const gl::Data &data,
GLenum mode, GLint first, GLenum mode, GLint first,
...@@ -148,9 +149,6 @@ class RendererD3D : public Renderer, public BufferFactoryD3D ...@@ -148,9 +149,6 @@ class RendererD3D : public Renderer, public BufferFactoryD3D
virtual unsigned int getReservedFragmentUniformVectors() const = 0; virtual unsigned int getReservedFragmentUniformVectors() const = 0;
virtual unsigned int getReservedVertexUniformBuffers() const = 0; virtual unsigned int getReservedVertexUniformBuffers() const = 0;
virtual unsigned int getReservedFragmentUniformBuffers() const = 0; virtual unsigned int getReservedFragmentUniformBuffers() const = 0;
virtual bool getShareHandleSupport() const = 0;
virtual bool getKeyedMutexSupport() const = 0;
virtual bool getPostSubBufferSupport() const = 0;
virtual int getMajorShaderModel() const = 0; virtual int getMajorShaderModel() const = 0;
......
...@@ -764,6 +764,31 @@ egl::ConfigSet Renderer11::generateConfigs() const ...@@ -764,6 +764,31 @@ egl::ConfigSet Renderer11::generateConfigs() const
return configs; return configs;
} }
void Renderer11::generateDisplayExtensions(egl::DisplayExtensions *outExtensions) const
{
outExtensions->createContextRobustness = true;
if (getShareHandleSupport())
{
outExtensions->d3dShareHandleClientBuffer = true;
outExtensions->surfaceD3DTexture2DShareHandle = true;
}
#ifdef ANGLE_ENABLE_KEYEDMUTEX
outExtensions->keyedMutex = true;
#endif
outExtensions->querySurfacePointer = true;
outExtensions->windowFixedSize = true;
// D3D11 does not support present with dirty rectangles until DXGI 1.2.
outExtensions->postSubBuffer = mRenderer11DeviceCaps.supportsDXGI1_2;
outExtensions->createContext = true;
outExtensions->deviceQuery = true;
}
gl::Error Renderer11::flush() gl::Error Renderer11::flush()
{ {
mDeviceContext->Flush(); mDeviceContext->Flush();
...@@ -2530,21 +2555,6 @@ bool Renderer11::getShareHandleSupport() const ...@@ -2530,21 +2555,6 @@ bool Renderer11::getShareHandleSupport() const
return true; return true;
} }
bool Renderer11::getKeyedMutexSupport() const
{
#ifdef ANGLE_ENABLE_KEYEDMUTEX
return true;
#else
return false;
#endif
}
bool Renderer11::getPostSubBufferSupport() const
{
// D3D11 does not support present with dirty rectangles until DXGI 1.2.
return mRenderer11DeviceCaps.supportsDXGI1_2;
}
int Renderer11::getMajorShaderModel() const int Renderer11::getMajorShaderModel() const
{ {
switch (mRenderer11DeviceCaps.featureLevel) switch (mRenderer11DeviceCaps.featureLevel)
......
...@@ -105,6 +105,7 @@ class Renderer11 : public RendererD3D ...@@ -105,6 +105,7 @@ class Renderer11 : public RendererD3D
virtual bool resetDevice(); virtual bool resetDevice();
egl::ConfigSet generateConfigs() const override; egl::ConfigSet generateConfigs() const override;
void generateDisplayExtensions(egl::DisplayExtensions *outExtensions) const override;
gl::Error flush() override; gl::Error flush() override;
gl::Error finish() override; gl::Error finish() override;
...@@ -160,9 +161,8 @@ class Renderer11 : public RendererD3D ...@@ -160,9 +161,8 @@ class Renderer11 : public RendererD3D
virtual unsigned int getReservedFragmentUniformVectors() const; virtual unsigned int getReservedFragmentUniformVectors() const;
virtual unsigned int getReservedVertexUniformBuffers() const; virtual unsigned int getReservedVertexUniformBuffers() const;
virtual unsigned int getReservedFragmentUniformBuffers() const; virtual unsigned int getReservedFragmentUniformBuffers() const;
virtual bool getShareHandleSupport() const;
bool getKeyedMutexSupport() const override; bool getShareHandleSupport() const;
virtual bool getPostSubBufferSupport() const;
virtual int getMajorShaderModel() const; virtual int getMajorShaderModel() const;
int getMinorShaderModel() const override; int getMinorShaderModel() const override;
......
...@@ -508,6 +508,23 @@ egl::ConfigSet Renderer9::generateConfigs() const ...@@ -508,6 +508,23 @@ egl::ConfigSet Renderer9::generateConfigs() const
return configs; return configs;
} }
void Renderer9::generateDisplayExtensions(egl::DisplayExtensions *outExtensions) const
{
outExtensions->createContextRobustness = true;
if (getShareHandleSupport())
{
outExtensions->d3dShareHandleClientBuffer = true;
outExtensions->surfaceD3DTexture2DShareHandle = true;
}
outExtensions->querySurfacePointer = true;
outExtensions->windowFixedSize = true;
outExtensions->postSubBuffer = true;
outExtensions->createContext = true;
outExtensions->deviceQuery = true;
}
void Renderer9::startScene() void Renderer9::startScene()
{ {
if (!mSceneStarted) if (!mSceneStarted)
...@@ -2507,16 +2524,6 @@ bool Renderer9::getShareHandleSupport() const ...@@ -2507,16 +2524,6 @@ bool Renderer9::getShareHandleSupport() const
return (mD3d9Ex != NULL) && !gl::DebugAnnotationsActive(); return (mD3d9Ex != NULL) && !gl::DebugAnnotationsActive();
} }
bool Renderer9::getKeyedMutexSupport() const
{
return false;
}
bool Renderer9::getPostSubBufferSupport() const
{
return true;
}
int Renderer9::getMajorShaderModel() const int Renderer9::getMajorShaderModel() const
{ {
return D3DSHADER_VERSION_MAJOR(mDeviceCaps.PixelShaderVersion); return D3DSHADER_VERSION_MAJOR(mDeviceCaps.PixelShaderVersion);
......
...@@ -68,6 +68,7 @@ class Renderer9 : public RendererD3D ...@@ -68,6 +68,7 @@ class Renderer9 : public RendererD3D
virtual bool resetDevice(); virtual bool resetDevice();
egl::ConfigSet generateConfigs() const override; egl::ConfigSet generateConfigs() const override;
void generateDisplayExtensions(egl::DisplayExtensions *outExtensions) const override;
void startScene(); void startScene();
void endScene(); void endScene();
...@@ -143,9 +144,8 @@ class Renderer9 : public RendererD3D ...@@ -143,9 +144,8 @@ class Renderer9 : public RendererD3D
virtual unsigned int getReservedFragmentUniformVectors() const; virtual unsigned int getReservedFragmentUniformVectors() const;
virtual unsigned int getReservedVertexUniformBuffers() const; virtual unsigned int getReservedVertexUniformBuffers() const;
virtual unsigned int getReservedFragmentUniformBuffers() const; virtual unsigned int getReservedFragmentUniformBuffers() const;
virtual bool getShareHandleSupport() const;
bool getKeyedMutexSupport() const override; bool getShareHandleSupport() const;
virtual bool getPostSubBufferSupport() const;
virtual int getMajorShaderModel() const; virtual int getMajorShaderModel() const;
int getMinorShaderModel() const override; int getMinorShaderModel() const override;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment