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
void DisplayD3D::generateExtensions(egl::DisplayExtensions *outExtensions) const
{
outExtensions->createContextRobustness = true;
// 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;
mRenderer->generateDisplayExtensions(outExtensions);
}
std::string DisplayD3D::getVendorString() const
......
......@@ -92,6 +92,7 @@ class RendererD3D : public Renderer, public BufferFactoryD3D
virtual egl::Error initialize() = 0;
virtual egl::ConfigSet generateConfigs() const = 0;
virtual void generateDisplayExtensions(egl::DisplayExtensions *outExtensions) const = 0;
gl::Error drawArrays(const gl::Data &data,
GLenum mode, GLint first,
......@@ -148,9 +149,6 @@ class RendererD3D : public Renderer, public BufferFactoryD3D
virtual unsigned int getReservedFragmentUniformVectors() const = 0;
virtual unsigned int getReservedVertexUniformBuffers() 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;
......
......@@ -764,6 +764,31 @@ egl::ConfigSet Renderer11::generateConfigs() const
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()
{
mDeviceContext->Flush();
......@@ -2530,21 +2555,6 @@ bool Renderer11::getShareHandleSupport() const
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
{
switch (mRenderer11DeviceCaps.featureLevel)
......
......@@ -105,6 +105,7 @@ class Renderer11 : public RendererD3D
virtual bool resetDevice();
egl::ConfigSet generateConfigs() const override;
void generateDisplayExtensions(egl::DisplayExtensions *outExtensions) const override;
gl::Error flush() override;
gl::Error finish() override;
......@@ -160,9 +161,8 @@ class Renderer11 : public RendererD3D
virtual unsigned int getReservedFragmentUniformVectors() const;
virtual unsigned int getReservedVertexUniformBuffers() const;
virtual unsigned int getReservedFragmentUniformBuffers() const;
virtual bool getShareHandleSupport() const;
bool getKeyedMutexSupport() const override;
virtual bool getPostSubBufferSupport() const;
bool getShareHandleSupport() const;
virtual int getMajorShaderModel() const;
int getMinorShaderModel() const override;
......
......@@ -508,6 +508,23 @@ egl::ConfigSet Renderer9::generateConfigs() const
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()
{
if (!mSceneStarted)
......@@ -2507,16 +2524,6 @@ bool Renderer9::getShareHandleSupport() const
return (mD3d9Ex != NULL) && !gl::DebugAnnotationsActive();
}
bool Renderer9::getKeyedMutexSupport() const
{
return false;
}
bool Renderer9::getPostSubBufferSupport() const
{
return true;
}
int Renderer9::getMajorShaderModel() const
{
return D3DSHADER_VERSION_MAJOR(mDeviceCaps.PixelShaderVersion);
......
......@@ -68,6 +68,7 @@ class Renderer9 : public RendererD3D
virtual bool resetDevice();
egl::ConfigSet generateConfigs() const override;
void generateDisplayExtensions(egl::DisplayExtensions *outExtensions) const override;
void startScene();
void endScene();
......@@ -143,9 +144,8 @@ class Renderer9 : public RendererD3D
virtual unsigned int getReservedFragmentUniformVectors() const;
virtual unsigned int getReservedVertexUniformBuffers() const;
virtual unsigned int getReservedFragmentUniformBuffers() const;
virtual bool getShareHandleSupport() const;
bool getKeyedMutexSupport() const override;
virtual bool getPostSubBufferSupport() const;
bool getShareHandleSupport() const;
virtual int getMajorShaderModel() const;
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