Added parameters for maximum 3D texture size. Renamed maximum 2D texture size…

Added parameters for maximum 3D texture size. Renamed maximum 2D texture size methods and variables. TRAC #22705 Signed-off-by: Jamie Madill Signed-off-by: Shannon Woods Author: Geoff Lang git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2167 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent e5dcce75
......@@ -289,14 +289,17 @@ void Context::makeCurrent(egl::Surface *surface)
mSupportsInstancing = mRenderer->getInstancingSupport();
mMaxViewportDimension = mRenderer->getMaxViewportDimension();
mMaxTextureDimension = std::min(std::min(mRenderer->getMaxTextureWidth(), mRenderer->getMaxTextureHeight()),
(int)gl::IMPLEMENTATION_MAX_TEXTURE_SIZE);
mMaxCubeTextureDimension = std::min(mMaxTextureDimension, (int)gl::IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE);
mMaxRenderbufferDimension = mMaxTextureDimension;
mMaxTextureLevel = log2(mMaxTextureDimension) + 1;
mMax2DTextureDimension = std::min(std::min(mRenderer->getMaxTextureWidth(), mRenderer->getMaxTextureHeight()),
(int)gl::IMPLEMENTATION_MAX_2D_TEXTURE_SIZE);
mMaxCubeTextureDimension = std::min(mMax2DTextureDimension, (int)gl::IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE);
mMax3DTextureDimension = std::min(std::min(mMax2DTextureDimension, mRenderer->getMaxTextureDepth()),
(int)gl::IMPLEMENTATION_MAX_3D_TEXTURE_SIZE);
mMaxRenderbufferDimension = mMax2DTextureDimension;
mMaxTextureLevel = log2(mMax2DTextureDimension) + 1;
mMaxTextureAnisotropy = mRenderer->getTextureMaxAnisotropy();
TRACE("MaxTextureDimension=%d, MaxCubeTextureDimension=%d, MaxRenderbufferDimension=%d, MaxTextureLevel=%d, MaxTextureAnisotropy=%f",
mMaxTextureDimension, mMaxCubeTextureDimension, mMaxRenderbufferDimension, mMaxTextureLevel, mMaxTextureAnisotropy);
TRACE("Max2DTextureDimension=%d, MaxCubeTextureDimension=%d, Max3DTextureDimension=%d, MaxRenderbufferDimension=%d, "
"MaxTextureLevel=%d, MaxTextureAnisotropy=%f", mMax2DTextureDimension, mMaxCubeTextureDimension, mMax3DTextureDimension,
mMaxRenderbufferDimension, mMaxTextureLevel, mMaxTextureAnisotropy);
mSupportsEventQueries = mRenderer->getEventQuerySupport();
mSupportsOcclusionQueries = mRenderer->getOcclusionQuerySupport();
......@@ -1466,8 +1469,9 @@ bool Context::getIntegerv(GLenum pname, GLint *params)
case GL_STENCIL_BACK_WRITEMASK: *params = mState.depthStencil.stencilBackWritemask; break;
case GL_STENCIL_CLEAR_VALUE: *params = mState.stencilClearValue; break;
case GL_SUBPIXEL_BITS: *params = 4; break;
case GL_MAX_TEXTURE_SIZE: *params = getMaximumTextureDimension(); break;
case GL_MAX_TEXTURE_SIZE: *params = getMaximum2DTextureDimension(); break;
case GL_MAX_CUBE_MAP_TEXTURE_SIZE: *params = getMaximumCubeTextureDimension(); break;
case GL_MAX_3D_TEXTURE_SIZE: *params = getMaximum3DTextureDimension(); break;
case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
params[0] = mNumCompressedTextureFormats;
break;
......@@ -1873,6 +1877,7 @@ bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *nu
case GL_COPY_WRITE_BUFFER_BINDING:
case GL_PIXEL_PACK_BUFFER_BINDING:
case GL_PIXEL_UNPACK_BUFFER_BINDING:
case GL_MAX_3D_TEXTURE_SIZE:
{
*type = GL_INT;
*numParams = 1;
......@@ -2422,9 +2427,9 @@ int Context::getMaximumRenderbufferDimension() const
return mMaxRenderbufferDimension;
}
int Context::getMaximumTextureDimension() const
int Context::getMaximum2DTextureDimension() const
{
return mMaxTextureDimension;
return mMax2DTextureDimension;
}
int Context::getMaximumCubeTextureDimension() const
......@@ -2432,6 +2437,11 @@ int Context::getMaximumCubeTextureDimension() const
return mMaxCubeTextureDimension;
}
int Context::getMaximum3DTextureDimension() const
{
return mMax3DTextureDimension;
}
int Context::getMaximumTextureLevel() const
{
return mMaxTextureLevel;
......
......@@ -416,8 +416,9 @@ class Context
unsigned int getMaximumCombinedTextureImageUnits() const;
unsigned int getMaximumCombinedUniformBufferBindings() const;
int getMaximumRenderbufferDimension() const;
int getMaximumTextureDimension() const;
int getMaximum2DTextureDimension() const;
int getMaximumCubeTextureDimension() const;
int getMaximum3DTextureDimension() const;
int getMaximumTextureLevel() const;
unsigned int getMaximumRenderTargets() const;
GLsizei getMaxSupportedSamples() const;
......@@ -531,8 +532,9 @@ class Context
bool mSupportsInstancing;
int mMaxViewportDimension;
int mMaxRenderbufferDimension;
int mMaxTextureDimension;
int mMax2DTextureDimension;
int mMaxCubeTextureDimension;
int mMax3DTextureDimension;
int mMaxTextureLevel;
float mMaxTextureAnisotropy;
bool mSupportsEventQueries;
......
......@@ -46,8 +46,9 @@ enum
// These are the maximums the implementation can support
// The actual GL caps are limited by the device caps
// and should be queried from the Context
IMPLEMENTATION_MAX_TEXTURE_SIZE = 16384,
IMPLEMENTATION_MAX_2D_TEXTURE_SIZE = 16384,
IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE = 16384,
IMPLEMENTATION_MAX_3D_TEXTURE_SIZE = 2048,
IMPLEMENTATION_MAX_TEXTURE_LEVELS = 15 // 1+log2 of MAX_TEXTURE_SIZE
};
......
......@@ -1171,8 +1171,8 @@ void __stdcall glCompressedTexImage2D(GLenum target, GLint level, GLenum interna
switch (target)
{
case GL_TEXTURE_2D:
if (width > (context->getMaximumTextureDimension() >> level) ||
height > (context->getMaximumTextureDimension() >> level))
if (width > (context->getMaximum2DTextureDimension() >> level) ||
height > (context->getMaximum2DTextureDimension() >> level))
{
return gl::error(GL_INVALID_VALUE);
}
......@@ -1415,8 +1415,8 @@ void __stdcall glCopyTexImage2D(GLenum target, GLint level, GLenum internalforma
switch (target)
{
case GL_TEXTURE_2D:
if (width > (context->getMaximumTextureDimension() >> level) ||
height > (context->getMaximumTextureDimension() >> level))
if (width > (context->getMaximum2DTextureDimension() >> level) ||
height > (context->getMaximum2DTextureDimension() >> level))
{
return gl::error(GL_INVALID_VALUE);
}
......@@ -5538,8 +5538,8 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL
switch (target)
{
case GL_TEXTURE_2D:
if (width > (context->getMaximumTextureDimension() >> level) ||
height > (context->getMaximumTextureDimension() >> level))
if (width > (context->getMaximum2DTextureDimension() >> level) ||
height > (context->getMaximum2DTextureDimension() >> level))
{
return gl::error(GL_INVALID_VALUE);
}
......@@ -5900,8 +5900,8 @@ void __stdcall glTexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalf
switch (target)
{
case GL_TEXTURE_2D:
if (width > context->getMaximumTextureDimension() ||
height > context->getMaximumTextureDimension())
if (width > context->getMaximum2DTextureDimension() ||
height > context->getMaximum2DTextureDimension())
{
return gl::error(GL_INVALID_VALUE);
}
......
......@@ -180,6 +180,7 @@ class Renderer
virtual int getMaxViewportDimension() const = 0;
virtual int getMaxTextureWidth() const = 0;
virtual int getMaxTextureHeight() const = 0;
virtual int getMaxTextureDepth() const = 0;
virtual bool get32BitIndexSupport() const = 0;
virtual int getMinSwapInterval() const = 0;
virtual int getMaxSwapInterval() const = 0;
......
......@@ -2378,6 +2378,17 @@ int Renderer11::getMaxTextureHeight() const
}
}
int Renderer11::getMaxTextureDepth() const
{
switch (mFeatureLevel)
{
case D3D_FEATURE_LEVEL_11_0: return D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION; // 2048
case D3D_FEATURE_LEVEL_10_1:
case D3D_FEATURE_LEVEL_10_0: return D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION; // 2048
default: UNREACHABLE(); return 0;
}
}
bool Renderer11::get32BitIndexSupport() const
{
switch (mFeatureLevel)
......
......@@ -126,6 +126,7 @@ class Renderer11 : public Renderer
virtual int getMaxViewportDimension() const;
virtual int getMaxTextureWidth() const;
virtual int getMaxTextureHeight() const;
virtual int getMaxTextureDepth() const;
virtual bool get32BitIndexSupport() const;
virtual int getMinSwapInterval() const;
virtual int getMaxSwapInterval() const;
......
......@@ -2359,7 +2359,7 @@ float Renderer9::getMaxPointSize() const
int Renderer9::getMaxViewportDimension() const
{
int maxTextureDimension = std::min(std::min(getMaxTextureWidth(), getMaxTextureHeight()),
(int)gl::IMPLEMENTATION_MAX_TEXTURE_SIZE);
(int)gl::IMPLEMENTATION_MAX_2D_TEXTURE_SIZE);
return maxTextureDimension;
}
......@@ -2373,6 +2373,12 @@ int Renderer9::getMaxTextureHeight() const
return (int)mDeviceCaps.MaxTextureHeight;
}
int Renderer9::getMaxTextureDepth() const
{
// 3D textures are not available in the D3D9 backend.
return 1;
}
bool Renderer9::get32BitIndexSupport() const
{
return mDeviceCaps.MaxVertexIndex >= (1 << 16);
......
......@@ -141,6 +141,7 @@ class Renderer9 : public Renderer
virtual int getMaxViewportDimension() const;
virtual int getMaxTextureWidth() const;
virtual int getMaxTextureHeight() const;
virtual int getMaxTextureDepth() const;
virtual bool get32BitIndexSupport() const;
DWORD getCapsDeclTypes() const;
virtual int getMinSwapInterval() 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