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 ...@@ -45,7 +45,7 @@ SurfaceImpl *DisplayVkAndroid::createWindowSurfaceVk(const egl::SurfaceState &st
egl::ConfigSet DisplayVkAndroid::generateConfigs() 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}; constexpr EGLint kSampleCounts[] = {0};
return egl_vk::GenerateConfigs(kColorFormats, egl_vk::kConfigDepthStencilFormats, kSampleCounts, return egl_vk::GenerateConfigs(kColorFormats, egl_vk::kConfigDepthStencilFormats, kSampleCounts,
this); this);
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "test_utils/ANGLETest.h" #include "test_utils/ANGLETest.h"
#include "test_utils/angle_test_configs.h" #include "test_utils/angle_test_configs.h"
#include "test_utils/angle_test_instantiate.h"
#include "util/OSWindow.h" #include "util/OSWindow.h"
using namespace angle; using namespace angle;
...@@ -69,6 +70,27 @@ class EGLContextCompatibilityTest : public EGLTest, ...@@ -69,6 +70,27 @@ class EGLContextCompatibilityTest : public EGLTest,
return (samples > 1); 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) bool areConfigsCompatible(EGLConfig c1, EGLConfig c2, EGLint surfaceBit)
{ {
EGLint colorBufferType1, colorBufferType2; EGLint colorBufferType1, colorBufferType2;
...@@ -237,8 +259,10 @@ TEST_P(EGLContextCompatibilityTest, WindowSameConfig) ...@@ -237,8 +259,10 @@ TEST_P(EGLContextCompatibilityTest, WindowSameConfig)
if ((surfaceType & EGL_WINDOW_BIT) != 0) if ((surfaceType & EGL_WINDOW_BIT) != 0)
{ {
// Disabling multisampled configurations due to test instability with various graphics // Disabling multisampled configurations due to test instability with various graphics
// cards // cards, and RGBA16F/RGB10_A2 on Android due to OSWindow on Android not providing
if (isMultisampledConfig(config)) // compatible windows (anglebug.com/3156)
if (isMultisampledConfig(config) ||
(IsAndroid() && (isRGB10_A2Config(config) || isRGBA16FConfig(config))))
{ {
continue; continue;
} }
...@@ -262,8 +286,9 @@ TEST_P(EGLContextCompatibilityTest, PbufferSameConfig) ...@@ -262,8 +286,9 @@ TEST_P(EGLContextCompatibilityTest, PbufferSameConfig)
if ((surfaceType & EGL_PBUFFER_BIT) != 0) if ((surfaceType & EGL_PBUFFER_BIT) != 0)
{ {
// Disabling multisampled configurations due to test instability with various graphics // Disabling multisampled configurations due to test instability with various graphics
// cards // cards, and RGB10_A2 on Android due to OSWindow on Android not providing compatible
if (isMultisampledConfig(config)) // windows (anglebug.com/3156)
if (isMultisampledConfig(config) || (IsAndroid() && isRGB10_A2Config(config)))
{ {
continue; continue;
} }
...@@ -284,8 +309,11 @@ TEST_P(EGLContextCompatibilityTest, WindowDifferentConfig) ...@@ -284,8 +309,11 @@ TEST_P(EGLContextCompatibilityTest, WindowDifferentConfig)
for (size_t i = 0; i < mConfigs.size(); i++) for (size_t i = 0; i < mConfigs.size(); i++)
{ {
EGLConfig config1 = mConfigs[i]; EGLConfig config1 = mConfigs[i];
// Disabling multisampled configurations due to test instability with various graphics cards // Disabling multisampled configurations due to test instability with various graphics
if (isMultisampledConfig(config1)) // 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; continue;
} }
...@@ -303,8 +331,10 @@ TEST_P(EGLContextCompatibilityTest, WindowDifferentConfig) ...@@ -303,8 +331,10 @@ TEST_P(EGLContextCompatibilityTest, WindowDifferentConfig)
{ {
EGLConfig config2 = mConfigs[j]; EGLConfig config2 = mConfigs[j];
// Disabling multisampled configurations due to test instability with various graphics // Disabling multisampled configurations due to test instability with various graphics
// cards // cards, and RGBA16F/RGB10_A2 on Android due to OSWindow on Android not providing
if (isMultisampledConfig(config2)) // compatible windows (anglebug.com/3156)
if (isMultisampledConfig(config2) ||
(IsAndroid() && (isRGB10_A2Config(config2) || isRGBA16FConfig(config2))))
{ {
continue; continue;
} }
...@@ -321,8 +351,10 @@ TEST_P(EGLContextCompatibilityTest, PbufferDifferentConfig) ...@@ -321,8 +351,10 @@ TEST_P(EGLContextCompatibilityTest, PbufferDifferentConfig)
for (size_t i = 0; i < mConfigs.size(); i++) for (size_t i = 0; i < mConfigs.size(); i++)
{ {
EGLConfig config1 = mConfigs[i]; EGLConfig config1 = mConfigs[i];
// Disabling multisampled configurations due to test instability with various graphics cards // Disabling multisampled configurations due to test instability with various graphics
if (isMultisampledConfig(config1)) // 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; continue;
} }
...@@ -340,8 +372,9 @@ TEST_P(EGLContextCompatibilityTest, PbufferDifferentConfig) ...@@ -340,8 +372,9 @@ TEST_P(EGLContextCompatibilityTest, PbufferDifferentConfig)
{ {
EGLConfig config2 = mConfigs[j]; EGLConfig config2 = mConfigs[j];
// Disabling multisampled configurations due to test instability with various graphics // Disabling multisampled configurations due to test instability with various graphics
// cards // cards, and RGB10_A2 on Android due to OSWindow on Android not providing compatible
if (isMultisampledConfig(config2)) // windows (anglebug.com/3156)
if (isMultisampledConfig(config2) || (IsAndroid() && isRGB10_A2Config(config2)))
{ {
continue; continue;
} }
...@@ -361,4 +394,4 @@ ANGLE_INSTANTIATE_TEST(EGLContextCompatibilityTest, ...@@ -361,4 +394,4 @@ ANGLE_INSTANTIATE_TEST(EGLContextCompatibilityTest,
ES2_OPENGL(), ES2_OPENGL(),
ES2_OPENGLES(), ES2_OPENGLES(),
ES2_VULKAN()); ES2_VULKAN());
#endif // defined(NDEBUG) #endif // defined(NDEBUG)
\ No newline at end of file
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