Commit 9429f216 by Ian Elliott Committed by Commit Bot

Vulkan: Add missing EGLConfigs for Android Native pixel formats

GL_RGBA16F correlates to HAL_PIXEL_FORMAT_RGBA_FP16. GL_RGB10_A2 that correlates to HAL_PIXEL_FORMAT_RGBA_1010102. This fills-in key holes between generated ANGLE config formats and the Android native formats after GL_RGB565 was added to fix the configs that were missing for some games. Modified EGLContextCompatibilityTest to exclude GL_RGB10_A2 and GL_RGBA16F from some of the EGLContextCompatibilityTest cases. EGLContextCompatibilityTest uses the OSWindow utility, which only works with UNORM-compatible EGLConfigs that are a proper subset of GL_RGBA8. The new configs won't work with the WindowDifferentConfig and WindowSameConfig test cases. Bug: angleproject:3155 Change-Id: I693ed24f13ba787ea6d661f42ec65dc3d26f08f6 Reviewed-on: https://chromium-review.googlesource.com/c/1276807Reviewed-by: 's avatarYuly Novikov <ynovikov@chromium.org> Commit-Queue: Ian Elliott <ianelliott@google.com>
parent b6c1c66d
......@@ -45,7 +45,7 @@ SurfaceImpl *DisplayVkAndroid::createWindowSurfaceVk(const egl::SurfaceState &st
egl::ConfigSet DisplayVkAndroid::generateConfigs()
{
constexpr GLenum kColorFormats[] = {GL_RGBA8, GL_RGB8, GL_RGB565};
constexpr GLenum kColorFormats[] = {GL_RGBA8, GL_RGB8, GL_RGB565, GL_RGB10_A2, GL_RGBA16F};
constexpr EGLint kSampleCounts[] = {0};
return egl_vk::GenerateConfigs(kColorFormats, egl_vk::kConfigDepthStencilFormats, kSampleCounts,
this);
......
......@@ -14,6 +14,7 @@
#include "test_utils/ANGLETest.h"
#include "test_utils/angle_test_configs.h"
#include "test_utils/angle_test_instantiate.h"
#include "util/OSWindow.h"
using namespace angle;
......@@ -69,6 +70,27 @@ class EGLContextCompatibilityTest : public EGLTest,
return (samples > 1);
}
// The only configs with 16-bits for each of red, green, blue, and alpha is GL_RGBA16F
bool isRGBA16FConfig(EGLConfig config)
{
EGLint red, green, blue, alpha;
eglGetConfigAttrib(mDisplay, config, EGL_RED_SIZE, &red);
eglGetConfigAttrib(mDisplay, config, EGL_GREEN_SIZE, &green);
eglGetConfigAttrib(mDisplay, config, EGL_BLUE_SIZE, &blue);
eglGetConfigAttrib(mDisplay, config, EGL_ALPHA_SIZE, &alpha);
return ((red == 16) && (green == 16) && (blue == 16) && (alpha == 16));
}
bool isRGB10_A2Config(EGLConfig config)
{
EGLint red, green, blue, alpha;
eglGetConfigAttrib(mDisplay, config, EGL_RED_SIZE, &red);
eglGetConfigAttrib(mDisplay, config, EGL_GREEN_SIZE, &green);
eglGetConfigAttrib(mDisplay, config, EGL_BLUE_SIZE, &blue);
eglGetConfigAttrib(mDisplay, config, EGL_ALPHA_SIZE, &alpha);
return ((red == 10) && (green == 10) && (blue == 10) && (alpha == 2));
}
bool areConfigsCompatible(EGLConfig c1, EGLConfig c2, EGLint surfaceBit)
{
EGLint colorBufferType1, colorBufferType2;
......@@ -237,8 +259,10 @@ TEST_P(EGLContextCompatibilityTest, WindowSameConfig)
if ((surfaceType & EGL_WINDOW_BIT) != 0)
{
// Disabling multisampled configurations due to test instability with various graphics
// cards
if (isMultisampledConfig(config))
// cards, and RGBA16F/RGB10_A2 on Android due to OSWindow on Android not providing
// compatible windows (anglebug.com/3156)
if (isMultisampledConfig(config) ||
(IsAndroid() && (isRGB10_A2Config(config) || isRGBA16FConfig(config))))
{
continue;
}
......@@ -262,8 +286,9 @@ TEST_P(EGLContextCompatibilityTest, PbufferSameConfig)
if ((surfaceType & EGL_PBUFFER_BIT) != 0)
{
// Disabling multisampled configurations due to test instability with various graphics
// cards
if (isMultisampledConfig(config))
// cards, and RGB10_A2 on Android due to OSWindow on Android not providing compatible
// windows (anglebug.com/3156)
if (isMultisampledConfig(config) || (IsAndroid() && isRGB10_A2Config(config)))
{
continue;
}
......@@ -284,8 +309,11 @@ TEST_P(EGLContextCompatibilityTest, WindowDifferentConfig)
for (size_t i = 0; i < mConfigs.size(); i++)
{
EGLConfig config1 = mConfigs[i];
// Disabling multisampled configurations due to test instability with various graphics cards
if (isMultisampledConfig(config1))
// Disabling multisampled configurations due to test instability with various graphics
// cards, and RGBA16F/RGB10_A2 on Android due to OSWindow on Android not providing
// compatible windows (anglebug.com/3156)
if (isMultisampledConfig(config1) ||
(IsAndroid() && (isRGB10_A2Config(config1) || isRGBA16FConfig(config1))))
{
continue;
}
......@@ -303,8 +331,10 @@ TEST_P(EGLContextCompatibilityTest, WindowDifferentConfig)
{
EGLConfig config2 = mConfigs[j];
// Disabling multisampled configurations due to test instability with various graphics
// cards
if (isMultisampledConfig(config2))
// cards, and RGBA16F/RGB10_A2 on Android due to OSWindow on Android not providing
// compatible windows (anglebug.com/3156)
if (isMultisampledConfig(config2) ||
(IsAndroid() && (isRGB10_A2Config(config2) || isRGBA16FConfig(config2))))
{
continue;
}
......@@ -321,8 +351,10 @@ TEST_P(EGLContextCompatibilityTest, PbufferDifferentConfig)
for (size_t i = 0; i < mConfigs.size(); i++)
{
EGLConfig config1 = mConfigs[i];
// Disabling multisampled configurations due to test instability with various graphics cards
if (isMultisampledConfig(config1))
// Disabling multisampled configurations due to test instability with various graphics
// cards, and RGB10_A2 on Android due to OSWindow on Android not providing compatible
// windows (anglebug.com/3156)
if (isMultisampledConfig(config1) || (IsAndroid() && isRGB10_A2Config(config1)))
{
continue;
}
......@@ -340,8 +372,9 @@ TEST_P(EGLContextCompatibilityTest, PbufferDifferentConfig)
{
EGLConfig config2 = mConfigs[j];
// Disabling multisampled configurations due to test instability with various graphics
// cards
if (isMultisampledConfig(config2))
// cards, and RGB10_A2 on Android due to OSWindow on Android not providing compatible
// windows (anglebug.com/3156)
if (isMultisampledConfig(config2) || (IsAndroid() && isRGB10_A2Config(config2)))
{
continue;
}
......@@ -361,4 +394,4 @@ ANGLE_INSTANTIATE_TEST(EGLContextCompatibilityTest,
ES2_OPENGL(),
ES2_OPENGLES(),
ES2_VULKAN());
#endif // defined(NDEBUG)
\ No newline at end of file
#endif // defined(NDEBUG)
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