Commit 66b5ff58 by Cody Northrop Committed by Commit Bot

texture3D: Implement functionality and enable for Vulkan

Also update test expectations for texture3D. Bug: angleproject:3188 Change-Id: If8a8e0a83a86c48c2afb0c36534c1e9d4120fe47 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1682782Reviewed-by: 's avatarIan Elliott <ianelliott@google.com> Reviewed-by: 's avatarLingfeng Yang <lfy@google.com> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
parent 4fbbdb15
...@@ -178,6 +178,7 @@ Extensions::Extensions() ...@@ -178,6 +178,7 @@ Extensions::Extensions()
depthTextureOES(false), depthTextureOES(false),
depth24OES(false), depth24OES(false),
depth32(false), depth32(false),
texture3DOES(false),
textureStorage(false), textureStorage(false),
textureNPOT(false), textureNPOT(false),
drawBuffers(false), drawBuffers(false),
...@@ -876,6 +877,7 @@ const ExtensionInfoMap &GetExtensionInfoMap() ...@@ -876,6 +877,7 @@ const ExtensionInfoMap &GetExtensionInfoMap()
map["GL_OES_depth_texture"] = esOnlyExtension(&Extensions::depthTextureOES); map["GL_OES_depth_texture"] = esOnlyExtension(&Extensions::depthTextureOES);
map["GL_OES_depth24"] = esOnlyExtension(&Extensions::depth24OES); map["GL_OES_depth24"] = esOnlyExtension(&Extensions::depth24OES);
map["GL_OES_depth32"] = esOnlyExtension(&Extensions::depth32); map["GL_OES_depth32"] = esOnlyExtension(&Extensions::depth32);
map["GL_OES_texture_3D"] = enableableExtension(&Extensions::texture3DOES);
map["GL_EXT_texture_storage"] = enableableExtension(&Extensions::textureStorage); map["GL_EXT_texture_storage"] = enableableExtension(&Extensions::textureStorage);
map["GL_OES_texture_npot"] = enableableExtension(&Extensions::textureNPOT); map["GL_OES_texture_npot"] = enableableExtension(&Extensions::textureNPOT);
map["GL_EXT_draw_buffers"] = enableableExtension(&Extensions::drawBuffers); map["GL_EXT_draw_buffers"] = enableableExtension(&Extensions::drawBuffers);
......
...@@ -252,6 +252,9 @@ struct Extensions ...@@ -252,6 +252,9 @@ struct Extensions
// Allows DEPTH_COMPONENT32_OES as a valid Renderbuffer format. // Allows DEPTH_COMPONENT32_OES as a valid Renderbuffer format.
bool depth32; bool depth32;
// GL_OES_texture_3D
bool texture3DOES;
// GL_EXT_texture_storage // GL_EXT_texture_storage
bool textureStorage; bool textureStorage;
......
...@@ -85,6 +85,7 @@ Compiler::Compiler(rx::GLImplFactory *implFactory, const State &state) ...@@ -85,6 +85,7 @@ Compiler::Compiler(rx::GLImplFactory *implFactory, const State &state)
mResources.ARB_texture_rectangle = extensions.textureRectangle; mResources.ARB_texture_rectangle = extensions.textureRectangle;
mResources.OES_texture_storage_multisample_2d_array = mResources.OES_texture_storage_multisample_2d_array =
extensions.textureStorageMultisample2DArray; extensions.textureStorageMultisample2DArray;
mResources.OES_texture_3D = extensions.texture3DOES;
mResources.ANGLE_texture_multisample = extensions.textureMultisample; mResources.ANGLE_texture_multisample = extensions.textureMultisample;
mResources.ANGLE_multi_draw = extensions.multiDraw; mResources.ANGLE_multi_draw = extensions.multiDraw;
......
...@@ -359,12 +359,13 @@ void Context::initialize() ...@@ -359,12 +359,13 @@ void Context::initialize()
Texture *zeroTextureCube = new Texture(mImplementation.get(), 0, TextureType::CubeMap); Texture *zeroTextureCube = new Texture(mImplementation.get(), 0, TextureType::CubeMap);
mZeroTextures[TextureType::CubeMap].set(this, zeroTextureCube); mZeroTextures[TextureType::CubeMap].set(this, zeroTextureCube);
if (getClientVersion() >= Version(3, 0)) if (getClientVersion() >= Version(3, 0) || mSupportedExtensions.texture3DOES)
{ {
// TODO: These could also be enabled via extension
Texture *zeroTexture3D = new Texture(mImplementation.get(), 0, TextureType::_3D); Texture *zeroTexture3D = new Texture(mImplementation.get(), 0, TextureType::_3D);
mZeroTextures[TextureType::_3D].set(this, zeroTexture3D); mZeroTextures[TextureType::_3D].set(this, zeroTexture3D);
}
if (getClientVersion() >= Version(3, 0))
{
Texture *zeroTexture2DArray = new Texture(mImplementation.get(), 0, TextureType::_2DArray); Texture *zeroTexture2DArray = new Texture(mImplementation.get(), 0, TextureType::_2DArray);
mZeroTextures[TextureType::_2DArray].set(this, zeroTexture2DArray); mZeroTextures[TextureType::_2DArray].set(this, zeroTexture2DArray);
} }
...@@ -7771,6 +7772,22 @@ bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *nu ...@@ -7771,6 +7772,22 @@ bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *nu
*numParams = 1; *numParams = 1;
return true; return true;
} }
case GL_TEXTURE_BINDING_3D:
if ((getClientMajorVersion() < 3) && !getExtensions().texture3DOES)
{
return false;
}
*type = GL_INT;
*numParams = 1;
return true;
case GL_MAX_3D_TEXTURE_SIZE:
if ((getClientMajorVersion() < 3) && !getExtensions().texture3DOES)
{
return false;
}
*type = GL_INT;
*numParams = 1;
return true;
} }
if (pname >= GL_DRAW_BUFFER0_EXT && pname <= GL_DRAW_BUFFER15_EXT) if (pname >= GL_DRAW_BUFFER0_EXT && pname <= GL_DRAW_BUFFER15_EXT)
...@@ -7897,7 +7914,6 @@ bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *nu ...@@ -7897,7 +7914,6 @@ bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *nu
case GL_READ_BUFFER: case GL_READ_BUFFER:
case GL_TEXTURE_BINDING_3D: case GL_TEXTURE_BINDING_3D:
case GL_TEXTURE_BINDING_2D_ARRAY: case GL_TEXTURE_BINDING_2D_ARRAY:
case GL_MAX_3D_TEXTURE_SIZE:
case GL_MAX_ARRAY_TEXTURE_LAYERS: case GL_MAX_ARRAY_TEXTURE_LAYERS:
case GL_MAX_VERTEX_UNIFORM_BLOCKS: case GL_MAX_VERTEX_UNIFORM_BLOCKS:
case GL_MAX_FRAGMENT_UNIFORM_BLOCKS: case GL_MAX_FRAGMENT_UNIFORM_BLOCKS:
...@@ -8714,7 +8730,7 @@ void StateCache::updateValidBindTextureTypes(Context *context) ...@@ -8714,7 +8730,7 @@ void StateCache::updateValidBindTextureTypes(Context *context)
{TextureType::_2DArray, isGLES3}, {TextureType::_2DArray, isGLES3},
{TextureType::_2DMultisample, isGLES31 || exts.textureMultisample}, {TextureType::_2DMultisample, isGLES31 || exts.textureMultisample},
{TextureType::_2DMultisampleArray, exts.textureStorageMultisample2DArray}, {TextureType::_2DMultisampleArray, exts.textureStorageMultisample2DArray},
{TextureType::_3D, isGLES3}, {TextureType::_3D, isGLES3 || exts.texture3DOES},
{TextureType::External, exts.eglImageExternal || exts.eglStreamConsumerExternal}, {TextureType::External, exts.eglImageExternal || exts.eglStreamConsumerExternal},
{TextureType::Rectangle, exts.textureRectangle}, {TextureType::Rectangle, exts.textureRectangle},
{TextureType::CubeMap, true}, {TextureType::CubeMap, true},
......
...@@ -367,11 +367,13 @@ void State::initialize(Context *context) ...@@ -367,11 +367,13 @@ void State::initialize(Context *context)
mSamplerTextures[TextureType::_2D].resize(caps.maxCombinedTextureImageUnits); mSamplerTextures[TextureType::_2D].resize(caps.maxCombinedTextureImageUnits);
mSamplerTextures[TextureType::CubeMap].resize(caps.maxCombinedTextureImageUnits); mSamplerTextures[TextureType::CubeMap].resize(caps.maxCombinedTextureImageUnits);
if (clientVersion >= Version(3, 0) || nativeExtensions.texture3DOES)
{
mSamplerTextures[TextureType::_3D].resize(caps.maxCombinedTextureImageUnits);
}
if (clientVersion >= Version(3, 0)) if (clientVersion >= Version(3, 0))
{ {
// TODO: These could also be enabled via extension
mSamplerTextures[TextureType::_2DArray].resize(caps.maxCombinedTextureImageUnits); mSamplerTextures[TextureType::_2DArray].resize(caps.maxCombinedTextureImageUnits);
mSamplerTextures[TextureType::_3D].resize(caps.maxCombinedTextureImageUnits);
} }
if (clientVersion >= Version(3, 1) || nativeExtensions.textureMultisample) if (clientVersion >= Version(3, 1) || nativeExtensions.textureMultisample)
{ {
......
...@@ -1652,6 +1652,7 @@ void GenerateCaps(ID3D11Device *device, ...@@ -1652,6 +1652,7 @@ void GenerateCaps(ID3D11Device *device,
extensions->provokingVertex = true; extensions->provokingVertex = true;
extensions->blendFuncExtended = true; extensions->blendFuncExtended = true;
extensions->maxDualSourceDrawBuffers = 1; extensions->maxDualSourceDrawBuffers = 1;
extensions->texture3DOES = true;
// D3D11 cannot support reading depth texture as a luminance texture. // D3D11 cannot support reading depth texture as a luminance texture.
// It treats it as a red-channel-only texture. // It treats it as a red-channel-only texture.
......
...@@ -883,8 +883,8 @@ void GenerateCaps(const FunctionsGL *functions, ...@@ -883,8 +883,8 @@ void GenerateCaps(const FunctionsGL *functions,
if (functions->isAtLeastGL(gl::Version(4, 3)) || functions->isAtLeastGLES(gl::Version(3, 1)) || if (functions->isAtLeastGL(gl::Version(4, 3)) || functions->isAtLeastGLES(gl::Version(3, 1)) ||
functions->hasGLExtension("GL_ARB_framebuffer_no_attachments")) functions->hasGLExtension("GL_ARB_framebuffer_no_attachments"))
{ {
caps->maxFramebufferWidth = QuerySingleGLInt(functions, GL_MAX_FRAMEBUFFER_WIDTH); caps->maxFramebufferWidth = QuerySingleGLInt(functions, GL_MAX_FRAMEBUFFER_WIDTH);
caps->maxFramebufferHeight = QuerySingleGLInt(functions, GL_MAX_FRAMEBUFFER_HEIGHT); caps->maxFramebufferHeight = QuerySingleGLInt(functions, GL_MAX_FRAMEBUFFER_HEIGHT);
caps->maxFramebufferSamples = caps->maxFramebufferSamples =
std::min(QuerySingleGLInt(functions, GL_MAX_FRAMEBUFFER_SAMPLES), sampleCountLimit); std::min(QuerySingleGLInt(functions, GL_MAX_FRAMEBUFFER_SAMPLES), sampleCountLimit);
} }
...@@ -896,7 +896,7 @@ void GenerateCaps(const FunctionsGL *functions, ...@@ -896,7 +896,7 @@ void GenerateCaps(const FunctionsGL *functions,
if (functions->isAtLeastGL(gl::Version(3, 2)) || functions->isAtLeastGLES(gl::Version(3, 1)) || if (functions->isAtLeastGL(gl::Version(3, 2)) || functions->isAtLeastGLES(gl::Version(3, 1)) ||
functions->hasGLExtension("GL_ARB_texture_multisample")) functions->hasGLExtension("GL_ARB_texture_multisample"))
{ {
caps->maxSampleMaskWords = QuerySingleGLInt(functions, GL_MAX_SAMPLE_MASK_WORDS); caps->maxSampleMaskWords = QuerySingleGLInt(functions, GL_MAX_SAMPLE_MASK_WORDS);
caps->maxColorTextureSamples = caps->maxColorTextureSamples =
std::min(QuerySingleGLInt(functions, GL_MAX_COLOR_TEXTURE_SAMPLES), sampleCountLimit); std::min(QuerySingleGLInt(functions, GL_MAX_COLOR_TEXTURE_SAMPLES), sampleCountLimit);
caps->maxDepthTextureSamples = caps->maxDepthTextureSamples =
...@@ -1292,7 +1292,7 @@ void GenerateCaps(const FunctionsGL *functions, ...@@ -1292,7 +1292,7 @@ void GenerateCaps(const FunctionsGL *functions,
if (functions->isAtLeastGL(gl::Version(3, 1)) || if (functions->isAtLeastGL(gl::Version(3, 1)) ||
functions->hasGLExtension("GL_ARB_texture_rectangle")) functions->hasGLExtension("GL_ARB_texture_rectangle"))
{ {
extensions->textureRectangle = true; extensions->textureRectangle = true;
caps->maxRectangleTextureSize = std::min( caps->maxRectangleTextureSize = std::min(
QuerySingleGLInt(functions, GL_MAX_RECTANGLE_TEXTURE_SIZE_ANGLE), textureSizeLimit); QuerySingleGLInt(functions, GL_MAX_RECTANGLE_TEXTURE_SIZE_ANGLE), textureSizeLimit);
} }
...@@ -1412,6 +1412,9 @@ void GenerateCaps(const FunctionsGL *functions, ...@@ -1412,6 +1412,9 @@ void GenerateCaps(const FunctionsGL *functions,
functions->isAtLeastGL(gl::Version(3, 2)); functions->isAtLeastGL(gl::Version(3, 2));
extensions->textureExternalUpdateANGLE = true; extensions->textureExternalUpdateANGLE = true;
extensions->texture3DOES = functions->isAtLeastGL(gl::Version(1, 2)) ||
functions->isAtLeastGLES(gl::Version(3, 0)) ||
functions->hasGLESExtension("GL_OES_texture_3D");
} }
void InitializeFeatures(const FunctionsGL *functions, angle::FeaturesGL *features) void InitializeFeatures(const FunctionsGL *functions, angle::FeaturesGL *features)
......
...@@ -715,7 +715,7 @@ angle::Result WindowSurfaceVk::checkForOutOfDateSwapchain(ContextVk *contextVk, ...@@ -715,7 +715,7 @@ angle::Result WindowSurfaceVk::checkForOutOfDateSwapchain(ContextVk *contextVk,
if (swapIntervalChanged || presentOutOfDate || if (swapIntervalChanged || presentOutOfDate ||
contextVk->getRenderer()->getFeatures().perFrameWindowSizeQuery.enabled) contextVk->getRenderer()->getFeatures().perFrameWindowSizeQuery.enabled)
{ {
gl::Extents swapchainExtents(getWidth(), getHeight(), 0); gl::Extents swapchainExtents(getWidth(), getHeight(), 1);
gl::Extents currentExtents; gl::Extents currentExtents;
ANGLE_TRY(getCurrentWindowSize(contextVk, &currentExtents)); ANGLE_TRY(getCurrentWindowSize(contextVk, &currentExtents));
......
...@@ -43,7 +43,7 @@ angle::Result WindowSurfaceVkAndroid::getCurrentWindowSize(vk::Context *context, ...@@ -43,7 +43,7 @@ angle::Result WindowSurfaceVkAndroid::getCurrentWindowSize(vk::Context *context,
int32_t height = ANativeWindow_getHeight(mNativeWindowType); int32_t height = ANativeWindow_getHeight(mNativeWindowType);
ANGLE_VK_CHECK(context, width > 0 && height > 0, VK_ERROR_INITIALIZATION_FAILED); ANGLE_VK_CHECK(context, width > 0 && height > 0, VK_ERROR_INITIALIZATION_FAILED);
*extentsOut = gl::Extents(width, height, 0); *extentsOut = gl::Extents(width, height, 1);
return angle::Result::Continue; return angle::Result::Continue;
} }
......
...@@ -58,7 +58,7 @@ angle::Result WindowSurfaceVkFuchsia::getCurrentWindowSize(vk::Context *context, ...@@ -58,7 +58,7 @@ angle::Result WindowSurfaceVkFuchsia::getCurrentWindowSize(vk::Context *context,
int32_t width = fuchsia_egl_window_get_width(egl_window); int32_t width = fuchsia_egl_window_get_width(egl_window);
int32_t height = fuchsia_egl_window_get_height(egl_window); int32_t height = fuchsia_egl_window_get_height(egl_window);
*extentsOut = gl::Extents(width, height, 0); *extentsOut = gl::Extents(width, height, 1);
return angle::Result::Continue; return angle::Result::Continue;
} }
......
...@@ -104,6 +104,8 @@ void RendererVk::ensureCapsInitialized() const ...@@ -104,6 +104,8 @@ void RendererVk::ensureCapsInitialized() const
// Vulkan natively supports non power-of-two textures // Vulkan natively supports non power-of-two textures
mNativeExtensions.textureNPOT = true; mNativeExtensions.textureNPOT = true;
mNativeExtensions.texture3DOES = true;
// Vulkan natively supports standard derivatives // Vulkan natively supports standard derivatives
mNativeExtensions.standardDerivatives = true; mNativeExtensions.standardDerivatives = true;
......
...@@ -209,13 +209,16 @@ constexpr angle::PackedEnumMap<ImageLayout, ImageMemoryBarrierData> kImageMemory ...@@ -209,13 +209,16 @@ constexpr angle::PackedEnumMap<ImageLayout, ImageMemoryBarrierData> kImageMemory
VkImageCreateFlags GetImageCreateFlags(gl::TextureType textureType) VkImageCreateFlags GetImageCreateFlags(gl::TextureType textureType)
{ {
if (textureType == gl::TextureType::CubeMap) switch (textureType)
{ {
return VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT; case gl::TextureType::CubeMap:
} return VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT;
else
{ case gl::TextureType::_3D:
return 0; return VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT;
default:
return 0;
} }
} }
...@@ -1517,7 +1520,7 @@ angle::Result ImageHelper::initExternal(Context *context, ...@@ -1517,7 +1520,7 @@ angle::Result ImageHelper::initExternal(Context *context,
imageInfo.format = format.vkImageFormat; imageInfo.format = format.vkImageFormat;
imageInfo.extent.width = static_cast<uint32_t>(extents.width); imageInfo.extent.width = static_cast<uint32_t>(extents.width);
imageInfo.extent.height = static_cast<uint32_t>(extents.height); imageInfo.extent.height = static_cast<uint32_t>(extents.height);
imageInfo.extent.depth = 1; imageInfo.extent.depth = static_cast<uint32_t>(extents.depth);
imageInfo.mipLevels = mipLevels; imageInfo.mipLevels = mipLevels;
imageInfo.arrayLayers = mLayerCount; imageInfo.arrayLayers = mLayerCount;
imageInfo.samples = gl_vk::GetSamples(samples); imageInfo.samples = gl_vk::GetSamples(samples);
...@@ -1899,7 +1902,6 @@ void ImageHelper::clear(const VkClearValue &value, ...@@ -1899,7 +1902,6 @@ void ImageHelper::clear(const VkClearValue &value,
gl::Extents ImageHelper::getSize(const gl::ImageIndex &index) const gl::Extents ImageHelper::getSize(const gl::ImageIndex &index) const
{ {
ASSERT(mExtents.depth == 1);
GLint mipLevel = index.getLevelIndex(); GLint mipLevel = index.getLevelIndex();
// Level 0 should be the size of the extents, after that every time you increase a level // Level 0 should be the size of the extents, after that every time you increase a level
// you shrink the extents by half. // you shrink the extents by half.
...@@ -2065,8 +2067,6 @@ angle::Result ImageHelper::stageSubresourceUpdate(ContextVk *contextVk, ...@@ -2065,8 +2067,6 @@ angle::Result ImageHelper::stageSubresourceUpdate(ContextVk *contextVk,
ANGLE_VK_CHECK_MATH(contextVk, formatInfo.computeDepthPitch(extents.height, unpack.imageHeight, ANGLE_VK_CHECK_MATH(contextVk, formatInfo.computeDepthPitch(extents.height, unpack.imageHeight,
inputRowPitch, &inputDepthPitch)); inputRowPitch, &inputDepthPitch));
// Note: skip images for 3D Textures.
ASSERT(!index.usesTex3D());
bool applySkipImages = false; bool applySkipImages = false;
GLuint inputSkipBytes = 0; GLuint inputSkipBytes = 0;
......
...@@ -42,7 +42,7 @@ angle::Result WindowSurfaceVkWin32::getCurrentWindowSize(vk::Context *context, ...@@ -42,7 +42,7 @@ angle::Result WindowSurfaceVkWin32::getCurrentWindowSize(vk::Context *context,
ANGLE_VK_CHECK(context, GetClientRect(mNativeWindowType, &rect) == TRUE, ANGLE_VK_CHECK(context, GetClientRect(mNativeWindowType, &rect) == TRUE,
VK_ERROR_INITIALIZATION_FAILED); VK_ERROR_INITIALIZATION_FAILED);
*extentsOut = gl::Extents(rect.right - rect.left, rect.bottom - rect.top, 0); *extentsOut = gl::Extents(rect.right - rect.left, rect.bottom - rect.top, 1);
return angle::Result::Continue; return angle::Result::Continue;
} }
......
...@@ -42,7 +42,7 @@ angle::Result WindowSurfaceVkXcb::getCurrentWindowSize(vk::Context *context, ...@@ -42,7 +42,7 @@ angle::Result WindowSurfaceVkXcb::getCurrentWindowSize(vk::Context *context,
xcb_get_geometry_cookie_t cookie = xcb_get_geometry(mXcbConnection, mNativeWindowType); xcb_get_geometry_cookie_t cookie = xcb_get_geometry(mXcbConnection, mNativeWindowType);
xcb_get_geometry_reply_t *reply = xcb_get_geometry_reply(mXcbConnection, cookie, nullptr); xcb_get_geometry_reply_t *reply = xcb_get_geometry_reply(mXcbConnection, cookie, nullptr);
ASSERT(reply); ASSERT(reply);
*extentsOut = gl::Extents(reply->width, reply->height, 0); *extentsOut = gl::Extents(reply->width, reply->height, 1);
free(reply); free(reply);
return angle::Result::Continue; return angle::Result::Continue;
} }
......
...@@ -502,6 +502,9 @@ bool ValidTextureTarget(const Context *context, TextureType type) ...@@ -502,6 +502,9 @@ bool ValidTextureTarget(const Context *context, TextureType type)
return context->getExtensions().textureRectangle; return context->getExtensions().textureRectangle;
case TextureType::_3D: case TextureType::_3D:
return ((context->getClientMajorVersion() >= 3) ||
context->getExtensions().texture3DOES);
case TextureType::_2DArray: case TextureType::_2DArray:
return (context->getClientMajorVersion() >= 3); return (context->getClientMajorVersion() >= 3);
...@@ -5657,7 +5660,8 @@ bool ValidateTexParameterBase(Context *context, ...@@ -5657,7 +5660,8 @@ bool ValidateTexParameterBase(Context *context,
case GL_TEXTURE_COMPARE_FUNC: case GL_TEXTURE_COMPARE_FUNC:
case GL_TEXTURE_MIN_LOD: case GL_TEXTURE_MIN_LOD:
case GL_TEXTURE_MAX_LOD: case GL_TEXTURE_MAX_LOD:
if (context->getClientMajorVersion() < 3) if (context->getClientMajorVersion() < 3 &&
!(pname == GL_TEXTURE_WRAP_R && context->getExtensions().texture3DOES))
{ {
context->validationError(GL_INVALID_ENUM, kES3Required); context->validationError(GL_INVALID_ENUM, kES3Required);
return false; return false;
......
...@@ -1518,7 +1518,7 @@ bool ValidateCompressedTexImage3D(Context *context, ...@@ -1518,7 +1518,7 @@ bool ValidateCompressedTexImage3D(Context *context,
GLsizei imageSize, GLsizei imageSize,
const void *data) const void *data)
{ {
if (context->getClientMajorVersion() < 3) if ((context->getClientMajorVersion() < 3) && !context->getExtensions().texture3DOES)
{ {
context->validationError(GL_INVALID_OPERATION, kES3Required); context->validationError(GL_INVALID_OPERATION, kES3Required);
return false; return false;
...@@ -2004,7 +2004,7 @@ bool ValidateCopyTexSubImage3D(Context *context, ...@@ -2004,7 +2004,7 @@ bool ValidateCopyTexSubImage3D(Context *context,
GLsizei width, GLsizei width,
GLsizei height) GLsizei height)
{ {
if (context->getClientMajorVersion() < 3) if ((context->getClientMajorVersion() < 3) && !context->getExtensions().texture3DOES)
{ {
context->validationError(GL_INVALID_OPERATION, kES3Required); context->validationError(GL_INVALID_OPERATION, kES3Required);
return false; return false;
...@@ -2177,9 +2177,9 @@ bool ValidateTexImage3D(Context *context, ...@@ -2177,9 +2177,9 @@ bool ValidateTexImage3D(Context *context,
GLenum type, GLenum type,
const void *pixels) const void *pixels)
{ {
if (context->getClientMajorVersion() < 3) if ((context->getClientMajorVersion() < 3) && !context->getExtensions().texture3DOES)
{ {
context->validationError(GL_INVALID_OPERATION, kES3Required); context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false; return false;
} }
...@@ -2230,7 +2230,7 @@ bool ValidateTexSubImage3D(Context *context, ...@@ -2230,7 +2230,7 @@ bool ValidateTexSubImage3D(Context *context,
GLenum type, GLenum type,
const void *pixels) const void *pixels)
{ {
if (context->getClientMajorVersion() < 3) if ((context->getClientMajorVersion() < 3) && !context->getExtensions().texture3DOES)
{ {
context->validationError(GL_INVALID_OPERATION, kES3Required); context->validationError(GL_INVALID_OPERATION, kES3Required);
return false; return false;
...@@ -2284,7 +2284,7 @@ bool ValidateCompressedTexSubImage3D(Context *context, ...@@ -2284,7 +2284,7 @@ bool ValidateCompressedTexSubImage3D(Context *context,
GLsizei imageSize, GLsizei imageSize,
const void *data) const void *data)
{ {
if (context->getClientMajorVersion() < 3) if ((context->getClientMajorVersion() < 3) && !context->getExtensions().texture3DOES)
{ {
context->validationError(GL_INVALID_OPERATION, kES3Required); context->validationError(GL_INVALID_OPERATION, kES3Required);
return false; return false;
......
...@@ -541,73 +541,77 @@ ...@@ -541,73 +541,77 @@
// 3D texture: // 3D texture:
3188 VULKAN : dEQP-GLES3.functional.fbo.completeness.layer.3d* = SKIP 3188 VULKAN : dEQP-GLES3.functional.fbo.completeness.layer.3d* = SKIP
3188 VULKAN : dEQP-GLES3.functional.fbo.color.tex3d.* = SKIP 3188 VULKAN : dEQP-GLES3.functional.fbo.color.tex3d.* = SKIP
3188 VULKAN : dEQP-GLES3.functional.texture.format.*3d* = SKIP 3188 VULKAN : dEQP-GLES3.functional.texture.units.2_units.only_3d.6 = SKIP
3188 VULKAN : dEQP-GLES3.functional.texture.filtering.*3d* = SKIP 3188 VULKAN : dEQP-GLES3.functional.texture.units.4_units.only_3d.* = SKIP
3188 VULKAN : dEQP-GLES3.functional.texture.mipmap.*3d* = SKIP
// 2D array (anglebug.com/3189), new formats in ES 3.0 (anglebug.com/3190): // 2D array (anglebug.com/3189), new formats in ES 3.0 (anglebug.com/3190):
3189 VULKAN : dEQP-GLES3.functional.shaders.texture_functions.texturegrad.sampler2darrayshadow_vertex = SKIP 3189 VULKAN : dEQP-GLES3.functional.shaders.texture_functions.*2darray* = SKIP
3189 VULKAN : dEQP-GLES3.functional.fbo.completeness.layer.2darr* = SKIP 3189 VULKAN : dEQP-GLES3.functional.fbo.completeness.layer.2darr* = SKIP
3189 VULKAN : dEQP-GLES3.functional.fbo.color.tex2darray.* = SKIP 3189 VULKAN : dEQP-GLES3.functional.fbo.color.tex2darray.* = SKIP
3189 VULKAN : dEQP-GLES3.functional.state_query.texture.*2d_array* = SKIP
3189 VULKAN : dEQP-GLES3.functional.texture.format.*2d_array* = SKIP 3189 VULKAN : dEQP-GLES3.functional.texture.format.*2d_array* = SKIP
3189 VULKAN : dEQP-GLES3.functional.texture.filtering.*2d_array* = SKIP 3189 VULKAN : dEQP-GLES3.functional.texture.filtering.*2d_array* = SKIP
3189 VULKAN : dEQP-GLES3.functional.texture.shadow.2d_array.* = SKIP 3189 VULKAN : dEQP-GLES3.functional.texture.shadow.2d_array.* = SKIP
3189 VULKAN : dEQP-GLES3.functional.texture.specification.basic_teximage3d.*2d_array* = SKIP
3189 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.*2d_array = SKIP
3189 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.size.*2d_array* = SKIP
3189 VULKAN : dEQP-GLES3.functional.texture.specification.teximage3d_depth*2d_array = SKIP
3189 VULKAN : dEQP-GLES3.functional.texture.specification.texsubimage3d_depth*2d_array = SKIP
// New or broken formats in ES 3.0:
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage2d.format.rgb9* = FAIL 3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage2d.format.rgb9* = FAIL
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage2d.format.depth_component32* = FAIL 3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage2d.format.depth_component32* = FAIL
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage2d.format.depth_component24* = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage2d.format.depth_component24* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage2d.format.depth_component16* = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage2d.format.depth_component16* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage2d.format.depth24* = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage2d.format.depth24* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage2d.format.depth32* = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage2d.format.depth32* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.r11f* = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.r11f* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgba32* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgba16* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgba8* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgba4* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.srgb8* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb32* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb16* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb10* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb9* = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb9* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb8* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb5* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.rg32* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.rg16* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.rg8* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.r32* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.r16* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.r8* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.depth_component32* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.depth_component24* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.depth_component16* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.depth24* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.depth32* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage3d.size.* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.basic_teximage2d.r11f_g11f_b10f_* = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.specification.basic_teximage2d.r11f_g11f_b10f_* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.basic_teximage2d.rgb9_e5_* = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.specification.basic_teximage2d.rgb9_e5_* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.basic_teximage3d* = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.specification.basic_teximage3d.rgb9* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.basic_texsubimage2d.r11f_g11f_b10f_* = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.specification.basic_texsubimage2d.r11f_g11f_b10f_* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.basic_texsubimage2d.rgb9_e5_* = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.specification.basic_texsubimage2d.rgb9_e5_* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.basic_texsubimage3d* = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.specification.basic_texsubimage3d.r11f* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.basic_texsubimage3d.rgb9* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.random_teximage2d.2d_9 = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.specification.random_teximage2d.2d_9 = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.teximage2d_pbo.* = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.specification.teximage2d_pbo.* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.teximage3d_pbo.* = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.specification.teximage3d_pbo.* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.teximage3d_unpack_params.rgb8_skip_images = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texsubimage2d_pbo.* = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.specification.texsubimage2d_pbo.* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texsubimage3d_pbo.* = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.specification.texsubimage3d_pbo.* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texsubimage3d_unpack_params.rgb8_skip_images = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.teximage2d_depth.depth32f_stencil8 = FAIL 3190 VULKAN : dEQP-GLES3.functional.texture.specification.teximage2d_depth.depth32f_stencil8 = FAIL
3190 VULKAN : dEQP-GLES3.functional.texture.specification.teximage2d_depth_pbo.* = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.specification.teximage2d_depth_pbo.* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.teximage3d_depth* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texsubimage2d_depth.depth32f_stencil8 = FAIL 3190 VULKAN : dEQP-GLES3.functional.texture.specification.texsubimage2d_depth.depth32f_stencil8 = FAIL
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texsubimage3d_depth* = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.specification.teximage3d_unpack_params.r8_* = FAIL
3190 VULKAN : dEQP-GLES3.functional.texture.specification.teximage3d_unpack* = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.specification.texsubimage3d_unpack_params.r8_* = FAIL
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texsubimage3d_unpack* = SKIP 3190 VULKAN PIXEL2 : dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgba16* = FAIL
3190 VULKAN PIXEL2 : dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb16* = FAIL
3189 VULKAN : dEQP-GLES3.functional.texture.vertex.* = SKIP 3190 VULKAN PIXEL2 : dEQP-GLES3.functional.texture.specification.texstorage3d.format.rg32* = FAIL
3189 VULKAN : dEQP-GLES3.functional.texture.units.* = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.filtering.3d.formats.r11f* = SKIP
3189 VULKAN : dEQP-GLES3.functional.shaders.texture_functions.* = SKIP 3190 VULKAN : dEQP-GLES3.functional.texture.format.sized.3d.r11* = SKIP
// Functional texture general failures:
3190 VULKAN : dEQP-GLES3.functional.texture.vertex.2d.* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.vertex.cube.* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.vertex.2d_array.* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.units.*2d* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.units.*cube* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.units.*mixed* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.units.all_units.* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.units.8_units.* = SKIP
// New shader builtins for texture sampling:
3622 VULKAN : dEQP-GLES3.functional.shaders.texture_functions.textureoffset.* = SKIP
3622 VULKAN : dEQP-GLES3.functional.shaders.texture_functions.textureprojoffset.* = SKIP
3622 VULKAN : dEQP-GLES3.functional.shaders.texture_functions.texturelodoffset.* = SKIP
3622 VULKAN : dEQP-GLES3.functional.shaders.texture_functions.textureprojlodoffset.* = SKIP
3622 VULKAN : dEQP-GLES3.functional.shaders.texture_functions.texturegradoffset.* = SKIP
3622 VULKAN : dEQP-GLES3.functional.shaders.texture_functions.textureprojgradoffset.* = SKIP
3622 VULKAN : dEQP-GLES3.functional.shaders.texture_functions.texelfetch.* = SKIP
3622 VULKAN : dEQP-GLES3.functional.shaders.texture_functions.texelfetchoffset.* = SKIP
3622 VULKAN : dEQP-GLES3.functional.shaders.texture_functions.texturesize.* = SKIP
// ASTC support: // ASTC support:
// HDR not officially supported by Vulkan (see also the discussion in 1185): // HDR not officially supported by Vulkan (see also the discussion in 1185):
...@@ -674,6 +678,7 @@ ...@@ -674,6 +678,7 @@
// PBO: // PBO:
2950 VULKAN : dEQP-GLES3.functional.pbo.* = SKIP 2950 VULKAN : dEQP-GLES3.functional.pbo.* = SKIP
2950 VULKAN : dEQP-GLES3.functional.state_query.fbo.framebuffer_attachment_texture_layer = SKIP
// Uniform API: // Uniform API:
3198 VULKAN : dEQP-GLES3.functional.uniform_api.value.* = SKIP 3198 VULKAN : dEQP-GLES3.functional.uniform_api.value.* = SKIP
......
...@@ -40,3 +40,14 @@ ...@@ -40,3 +40,14 @@
// Depth/stencil related failures. // Depth/stencil related failures.
3457 VULKAN : KHR-GLES2.core.internalformat.texture2d.depth_stencil_unsigned_int_24_8_depth_stencil = FAIL 3457 VULKAN : KHR-GLES2.core.internalformat.texture2d.depth_stencil_unsigned_int_24_8_depth_stencil = FAIL
// 3d texture framebuffer tests
3188 VULKAN : KHR-GLES2.texture_3d.framebuffer_* = SKIP
// Unclear what is happening here, failing to validate a 2D texture format
3190 VULKAN : KHR-GLES2.texture_3d.copy_sub_image.rgba8 = SKIP
// Compressed texture tests on Android
3190 VULKAN PIXEL2 : KHR-GLES2.texture_3d.compressed_texture.rgba_astc_* = FAIL
3190 VULKAN PIXEL2 : KHR-GLES2.texture_3d.compressed_texture.sgb8_alpha8_astc_* = FAIL
3190 VULKAN PIXEL2 : KHR-GLES2.texture_3d.compressed_texture.srgb8_alpha8_astc_* = FAIL
\ No newline at end of file
...@@ -67,6 +67,10 @@ TEST_P(TextureParameterTest, InitialState) ...@@ -67,6 +67,10 @@ TEST_P(TextureParameterTest, InitialState)
// Negative test: invalid enum / operation // Negative test: invalid enum / operation
TEST_P(TextureParameterTest, NegativeEnum) TEST_P(TextureParameterTest, NegativeEnum)
{ {
// The texture3d query below appears to be broken on all configs
// anglebug.com/3639
ANGLE_SKIP_TEST_IF(true);
// Invalid target (not supported) // Invalid target (not supported)
glGetTexParameteriv(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, nullptr); glGetTexParameteriv(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, nullptr);
EXPECT_GL_ERROR(GL_INVALID_ENUM); EXPECT_GL_ERROR(GL_INVALID_ENUM);
......
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