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