Commit 52f1e7ef by Shannon Woods

Implements queriability for internal format sample counts.

TRAC #23273 Authored-by: Shannon Woods Signed-off-by: Geoff Lang Signed-off-by: Nicolas Capens
parent dd4674f2
...@@ -2550,6 +2550,16 @@ GLsizei Context::getMaxSupportedFormatSamples(GLint internalFormat) const ...@@ -2550,6 +2550,16 @@ GLsizei Context::getMaxSupportedFormatSamples(GLint internalFormat) const
return mRenderer->getMaxSupportedFormatSamples(internalFormat); return mRenderer->getMaxSupportedFormatSamples(internalFormat);
} }
GLsizei Context::getNumSampleCounts(GLint internalFormat) const
{
return mRenderer->getNumSampleCounts(internalFormat);
}
void Context::getSampleCounts(GLint internalFormat, GLsizei bufSize, GLint *params) const
{
mRenderer->getSampleCounts(internalFormat, bufSize, params);
}
unsigned int Context::getMaxTransformFeedbackBufferBindings() const unsigned int Context::getMaxTransformFeedbackBufferBindings() const
{ {
return mRenderer->getMaxTransformFeedbackBuffers(); return mRenderer->getMaxTransformFeedbackBuffers();
......
...@@ -373,6 +373,8 @@ class Context ...@@ -373,6 +373,8 @@ class Context
unsigned int getMaximumRenderTargets() const; unsigned int getMaximumRenderTargets() const;
GLsizei getMaxSupportedSamples() const; GLsizei getMaxSupportedSamples() const;
GLsizei getMaxSupportedFormatSamples(GLint internalFormat) const; GLsizei getMaxSupportedFormatSamples(GLint internalFormat) const;
GLsizei getNumSampleCounts(GLint internalFormat) const;
void getSampleCounts(GLint internalFormat, GLsizei bufSize, GLint *params) const;
unsigned int getMaxTransformFeedbackBufferBindings() const; unsigned int getMaxTransformFeedbackBufferBindings() const;
GLintptr getUniformBufferOffsetAlignment() const; GLintptr getUniformBufferOffsetAlignment() const;
const char *getCombinedExtensionsString() const; const char *getCombinedExtensionsString() const;
......
...@@ -204,6 +204,8 @@ class Renderer ...@@ -204,6 +204,8 @@ class Renderer
virtual GLsizei getMaxSupportedSamples() const = 0; virtual GLsizei getMaxSupportedSamples() const = 0;
virtual GLsizei getMaxSupportedFormatSamples(GLint internalFormat) const = 0; virtual GLsizei getMaxSupportedFormatSamples(GLint internalFormat) const = 0;
virtual GLsizei getNumSampleCounts(GLint internalFormat) const = 0;
virtual void getSampleCounts(GLint internalFormat, GLsizei bufSize, GLint *params) const = 0;
virtual unsigned int getMaxRenderTargets() const = 0; virtual unsigned int getMaxRenderTargets() const = 0;
......
...@@ -2456,6 +2456,55 @@ GLsizei Renderer11::getMaxSupportedFormatSamples(GLint internalFormat) const ...@@ -2456,6 +2456,55 @@ GLsizei Renderer11::getMaxSupportedFormatSamples(GLint internalFormat) const
return (iter != mMultisampleSupportMap.end()) ? iter->second.maxSupportedSamples : 0; return (iter != mMultisampleSupportMap.end()) ? iter->second.maxSupportedSamples : 0;
} }
GLsizei Renderer11::getNumSampleCounts(GLint internalFormat) const
{
unsigned int numCounts = 0;
// D3D11 supports multisampling for signed and unsigned format, but ES 3.0 does not
if (!gl::IsIntegerFormat(internalFormat, getCurrentClientVersion()))
{
DXGI_FORMAT format = gl_d3d11::GetRenderableFormat(internalFormat, getCurrentClientVersion());
MultisampleSupportMap::const_iterator iter = mMultisampleSupportMap.find(format);
if (iter != mMultisampleSupportMap.end())
{
const MultisampleSupportInfo& info = iter->second;
for (int i = 0; i < D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT; i++)
{
if (info.qualityLevels[i] > 0)
{
numCounts++;
}
}
}
}
return numCounts;
}
void Renderer11::getSampleCounts(GLint internalFormat, GLsizei bufSize, GLint *params) const
{
// D3D11 supports multisampling for signed and unsigned format, but ES 3.0 does not
if (gl::IsIntegerFormat(internalFormat, getCurrentClientVersion()))
return;
DXGI_FORMAT format = gl_d3d11::GetRenderableFormat(internalFormat, getCurrentClientVersion());
MultisampleSupportMap::const_iterator iter = mMultisampleSupportMap.find(format);
if (iter != mMultisampleSupportMap.end())
{
const MultisampleSupportInfo& info = iter->second;
int bufPos = 0;
for (int i = D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT - 1; i >= 0 && bufPos < bufSize; i--)
{
if (info.qualityLevels[i] > 0)
{
params[bufPos++] = i + 1;
}
}
}
}
int Renderer11::getNearestSupportedSamples(DXGI_FORMAT format, unsigned int requested) const int Renderer11::getNearestSupportedSamples(DXGI_FORMAT format, unsigned int requested) const
{ {
if (requested == 0) if (requested == 0)
......
...@@ -146,6 +146,8 @@ class Renderer11 : public Renderer ...@@ -146,6 +146,8 @@ class Renderer11 : public Renderer
virtual GLsizei getMaxSupportedSamples() const; virtual GLsizei getMaxSupportedSamples() const;
virtual GLsizei getMaxSupportedFormatSamples(GLint internalFormat) const; virtual GLsizei getMaxSupportedFormatSamples(GLint internalFormat) const;
virtual GLsizei getNumSampleCounts(GLint internalFormat) const;
virtual void getSampleCounts(GLint internalFormat, GLsizei bufSize, GLint *params) const;
int getNearestSupportedSamples(DXGI_FORMAT format, unsigned int requested) const; int getNearestSupportedSamples(DXGI_FORMAT format, unsigned int requested) const;
virtual unsigned int getMaxRenderTargets() const; virtual unsigned int getMaxRenderTargets() const;
......
...@@ -2455,6 +2455,46 @@ GLsizei Renderer9::getMaxSupportedFormatSamples(GLint internalFormat) const ...@@ -2455,6 +2455,46 @@ GLsizei Renderer9::getMaxSupportedFormatSamples(GLint internalFormat) const
return (itr != mMultiSampleSupport.end()) ? mMaxSupportedSamples : 0; return (itr != mMultiSampleSupport.end()) ? mMaxSupportedSamples : 0;
} }
GLsizei Renderer9::getNumSampleCounts(GLint internalFormat) const
{
D3DFORMAT format = gl_d3d9::GetTextureFormat(internalFormat, this);
MultisampleSupportMap::const_iterator iter = mMultiSampleSupport.find(format);
unsigned int numCounts = 0;
if (iter != mMultiSampleSupport.end())
{
const MultisampleSupportInfo& info = iter->second;
for (int i = 0; i < D3DMULTISAMPLE_16_SAMPLES; i++)
{
if (i != D3DMULTISAMPLE_NONMASKABLE && info.supportedSamples[i])
{
numCounts++;
}
}
}
return numCounts;
}
void Renderer9::getSampleCounts(GLint internalFormat, GLsizei bufSize, GLint *params) const
{
D3DFORMAT format = gl_d3d9::GetTextureFormat(internalFormat, this);
MultisampleSupportMap::const_iterator iter = mMultiSampleSupport.find(format);
if (iter != mMultiSampleSupport.end())
{
const MultisampleSupportInfo& info = iter->second;
int bufPos = 0;
for (int i = D3DMULTISAMPLE_16_SAMPLES; i >= 0 && bufPos < bufSize; i--)
{
if (i != D3DMULTISAMPLE_NONMASKABLE && info.supportedSamples[i])
{
params[bufPos++] = i;
}
}
}
}
int Renderer9::getNearestSupportedSamples(D3DFORMAT format, int requested) const int Renderer9::getNearestSupportedSamples(D3DFORMAT format, int requested) const
{ {
if (requested == 0) if (requested == 0)
......
...@@ -162,6 +162,8 @@ class Renderer9 : public Renderer ...@@ -162,6 +162,8 @@ class Renderer9 : public Renderer
virtual GLsizei getMaxSupportedSamples() const; virtual GLsizei getMaxSupportedSamples() const;
virtual GLsizei getMaxSupportedFormatSamples(GLint internalFormat) const; virtual GLsizei getMaxSupportedFormatSamples(GLint internalFormat) const;
virtual GLsizei getNumSampleCounts(GLint internalFormat) const;
virtual void getSampleCounts(GLint internalFormat, GLsizei bufSize, GLint *params) const;
int getNearestSupportedSamples(D3DFORMAT format, int requested) const; int getNearestSupportedSamples(D3DFORMAT format, int requested) const;
virtual unsigned int getMaxRenderTargets() const; virtual unsigned int getMaxRenderTargets() const;
......
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