Commit 8bb6baa0 by James Dong Committed by Commit Bot

Vulkan: improve handling of RGB texture formats

Adds fallback for some RGB textures using the corresponding RGBA formats and modifies fallback calculation to not require filtering/rendering for formats which are not required to support filtering by GL spec. Bug: angleproject:3190 Bug: angleproject:3196 Change-Id: I7beaf9881d63e3c6bd9339faede0333919a4174c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1665894 Commit-Queue: James Dong <dongja@google.com> Reviewed-by: 's avatarShahbaz Youssefi <syoussefi@chromium.org>
parent a7d8ada2
......@@ -196,9 +196,9 @@
"Vulkan format:src/libANGLE/renderer/vulkan/gen_vk_format_table.py":
"09340e3ba114b4acef6460ac8b242040",
"Vulkan format:src/libANGLE/renderer/vulkan/vk_format_map.json":
"1abd8aff8434973dac586d2c29f948af",
"9e0a57bee62f7b0603c7431c815d1be2",
"Vulkan format:src/libANGLE/renderer/vulkan/vk_format_table_autogen.cpp":
"b80639d5c253948c9aaae14c59ca43ee",
"8d7f42c646e4b05017552e5af1b3bc84",
"Vulkan internal shader programs:src/libANGLE/renderer/vulkan/gen_vk_internal_shaders.py":
"a528a53197ea6c8eaa3bb42a7cdf0a17",
"Vulkan internal shader programs:src/libANGLE/renderer/vulkan/shaders/gen/BlitResolve.frag.00000000.inc":
......
......@@ -264,6 +264,7 @@
"buffer": "R32G32B32_FLOAT"
},
"R8G8B8_SNORM": {
"image": "R8G8B8A8_SNORM",
"buffer": "R32G32B32_FLOAT"
},
"R8G8B8_USCALED": {
......@@ -332,6 +333,30 @@
},
"R16G16B16A16_SSCALED": {
"buffer": "R32G32B32A32_FLOAT"
},
"R32G32B32_UINT": {
"image": "R32G32B32A32_UINT"
},
"R32G32B32_SINT": {
"image": "R32G32B32A32_SINT"
},
"R16G16B16_UINT": {
"image": "R16G16B16A16_UINT"
},
"R16G16B16_SINT": {
"image": "R16G16B16A16_SINT"
},
"R8G8B8_UINT": {
"image": "R8G8B8A8_UINT"
},
"R8G8B8_SINT": {
"image": "R8G8B8A8_SINT"
},
"R16G16B16_FLOAT": {
"image": "R16G16B16A16_FLOAT"
},
"R32G32B32_FLOAT": {
"image": "R32G32B32A32_FLOAT"
}
}
}
......@@ -1063,10 +1063,14 @@ void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat)
break;
case angle::FormatID::R16G16B16_FLOAT:
internalFormat = GL_RGB16F;
imageFormatID = angle::FormatID::R16G16B16_FLOAT;
vkImageFormat = VK_FORMAT_R16G16B16_SFLOAT;
imageInitializerFunction = nullptr;
internalFormat = GL_RGB16F;
{
static constexpr ImageFormatInitInfo kInfo[] = {
{angle::FormatID::R16G16B16_FLOAT, VK_FORMAT_R16G16B16_SFLOAT, nullptr},
{angle::FormatID::R16G16B16A16_FLOAT, VK_FORMAT_R16G16B16A16_SFLOAT,
Initialize4ComponentData<GLhalf, 0x0000, 0x0000, 0x0000, gl::Float16One>}};
initImageFallback(renderer, kInfo, ArraySize(kInfo));
}
bufferFormatID = angle::FormatID::R16G16B16_FLOAT;
vkBufferFormat = VK_FORMAT_R16G16B16_SFLOAT;
vkBufferFormatIsPacked = false;
......@@ -1075,10 +1079,14 @@ void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat)
break;
case angle::FormatID::R16G16B16_SINT:
internalFormat = GL_RGB16I;
imageFormatID = angle::FormatID::R16G16B16_SINT;
vkImageFormat = VK_FORMAT_R16G16B16_SINT;
imageInitializerFunction = nullptr;
internalFormat = GL_RGB16I;
{
static constexpr ImageFormatInitInfo kInfo[] = {
{angle::FormatID::R16G16B16_SINT, VK_FORMAT_R16G16B16_SINT, nullptr},
{angle::FormatID::R16G16B16A16_SINT, VK_FORMAT_R16G16B16A16_SINT,
Initialize4ComponentData<GLshort, 0x0000, 0x0000, 0x0000, 0x0001>}};
initImageFallback(renderer, kInfo, ArraySize(kInfo));
}
bufferFormatID = angle::FormatID::R16G16B16_SINT;
vkBufferFormat = VK_FORMAT_R16G16B16_SINT;
vkBufferFormatIsPacked = false;
......@@ -1117,10 +1125,14 @@ void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat)
break;
case angle::FormatID::R16G16B16_UINT:
internalFormat = GL_RGB16UI;
imageFormatID = angle::FormatID::R16G16B16_UINT;
vkImageFormat = VK_FORMAT_R16G16B16_UINT;
imageInitializerFunction = nullptr;
internalFormat = GL_RGB16UI;
{
static constexpr ImageFormatInitInfo kInfo[] = {
{angle::FormatID::R16G16B16_UINT, VK_FORMAT_R16G16B16_UINT, nullptr},
{angle::FormatID::R16G16B16A16_UINT, VK_FORMAT_R16G16B16A16_UINT,
Initialize4ComponentData<GLushort, 0x0000, 0x0000, 0x0000, 0x0001>}};
initImageFallback(renderer, kInfo, ArraySize(kInfo));
}
bufferFormatID = angle::FormatID::R16G16B16_UINT;
vkBufferFormat = VK_FORMAT_R16G16B16_UINT;
vkBufferFormatIsPacked = false;
......@@ -1423,10 +1435,15 @@ void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat)
break;
case angle::FormatID::R32G32B32_FLOAT:
internalFormat = GL_RGB32F;
imageFormatID = angle::FormatID::R32G32B32_FLOAT;
vkImageFormat = VK_FORMAT_R32G32B32_SFLOAT;
imageInitializerFunction = nullptr;
internalFormat = GL_RGB32F;
{
static constexpr ImageFormatInitInfo kInfo[] = {
{angle::FormatID::R32G32B32_FLOAT, VK_FORMAT_R32G32B32_SFLOAT, nullptr},
{angle::FormatID::R32G32B32A32_FLOAT, VK_FORMAT_R32G32B32A32_SFLOAT,
Initialize4ComponentData<GLfloat, 0x00000000, 0x00000000, 0x00000000,
gl::Float32One>}};
initImageFallback(renderer, kInfo, ArraySize(kInfo));
}
bufferFormatID = angle::FormatID::R32G32B32_FLOAT;
vkBufferFormat = VK_FORMAT_R32G32B32_SFLOAT;
vkBufferFormatIsPacked = false;
......@@ -1435,10 +1452,15 @@ void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat)
break;
case angle::FormatID::R32G32B32_SINT:
internalFormat = GL_RGB32I;
imageFormatID = angle::FormatID::R32G32B32_SINT;
vkImageFormat = VK_FORMAT_R32G32B32_SINT;
imageInitializerFunction = nullptr;
internalFormat = GL_RGB32I;
{
static constexpr ImageFormatInitInfo kInfo[] = {
{angle::FormatID::R32G32B32_SINT, VK_FORMAT_R32G32B32_SINT, nullptr},
{angle::FormatID::R32G32B32A32_SINT, VK_FORMAT_R32G32B32A32_SINT,
Initialize4ComponentData<GLint, 0x00000000, 0x00000000, 0x00000000,
0x00000001>}};
initImageFallback(renderer, kInfo, ArraySize(kInfo));
}
bufferFormatID = angle::FormatID::R32G32B32_SINT;
vkBufferFormat = VK_FORMAT_R32G32B32_SINT;
vkBufferFormatIsPacked = false;
......@@ -1455,10 +1477,15 @@ void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat)
break;
case angle::FormatID::R32G32B32_UINT:
internalFormat = GL_RGB32UI;
imageFormatID = angle::FormatID::R32G32B32_UINT;
vkImageFormat = VK_FORMAT_R32G32B32_UINT;
imageInitializerFunction = nullptr;
internalFormat = GL_RGB32UI;
{
static constexpr ImageFormatInitInfo kInfo[] = {
{angle::FormatID::R32G32B32_UINT, VK_FORMAT_R32G32B32_UINT, nullptr},
{angle::FormatID::R32G32B32A32_UINT, VK_FORMAT_R32G32B32A32_UINT,
Initialize4ComponentData<GLuint, 0x00000000, 0x00000000, 0x00000000,
0x00000001>}};
initImageFallback(renderer, kInfo, ArraySize(kInfo));
}
bufferFormatID = angle::FormatID::R32G32B32_UINT;
vkBufferFormat = VK_FORMAT_R32G32B32_UINT;
vkBufferFormatIsPacked = false;
......@@ -1739,10 +1766,14 @@ void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat)
break;
case angle::FormatID::R8G8B8_SINT:
internalFormat = GL_RGB8I;
imageFormatID = angle::FormatID::R8G8B8_SINT;
vkImageFormat = VK_FORMAT_R8G8B8_SINT;
imageInitializerFunction = nullptr;
internalFormat = GL_RGB8I;
{
static constexpr ImageFormatInitInfo kInfo[] = {
{angle::FormatID::R8G8B8_SINT, VK_FORMAT_R8G8B8_SINT, nullptr},
{angle::FormatID::R8G8B8A8_SINT, VK_FORMAT_R8G8B8A8_SINT,
Initialize4ComponentData<GLbyte, 0x00, 0x00, 0x00, 0x01>}};
initImageFallback(renderer, kInfo, ArraySize(kInfo));
}
bufferFormatID = angle::FormatID::R8G8B8_SINT;
vkBufferFormat = VK_FORMAT_R8G8B8_SINT;
vkBufferFormatIsPacked = false;
......@@ -1751,10 +1782,14 @@ void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat)
break;
case angle::FormatID::R8G8B8_SNORM:
internalFormat = GL_RGB8_SNORM;
imageFormatID = angle::FormatID::R8G8B8_SNORM;
vkImageFormat = VK_FORMAT_R8G8B8_SNORM;
imageInitializerFunction = nullptr;
internalFormat = GL_RGB8_SNORM;
{
static constexpr ImageFormatInitInfo kInfo[] = {
{angle::FormatID::R8G8B8_SNORM, VK_FORMAT_R8G8B8_SNORM, nullptr},
{angle::FormatID::R8G8B8A8_SNORM, VK_FORMAT_R8G8B8A8_SNORM,
Initialize4ComponentData<GLbyte, 0x00, 0x00, 0x00, 0x7F>}};
initImageFallback(renderer, kInfo, ArraySize(kInfo));
}
{
static constexpr BufferFormatInitInfo kInfo[] = {
{angle::FormatID::R8G8B8_SNORM, VK_FORMAT_R8G8B8_SNORM, false,
......@@ -1781,10 +1816,14 @@ void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat)
break;
case angle::FormatID::R8G8B8_UINT:
internalFormat = GL_RGB8UI;
imageFormatID = angle::FormatID::R8G8B8_UINT;
vkImageFormat = VK_FORMAT_R8G8B8_UINT;
imageInitializerFunction = nullptr;
internalFormat = GL_RGB8UI;
{
static constexpr ImageFormatInitInfo kInfo[] = {
{angle::FormatID::R8G8B8_UINT, VK_FORMAT_R8G8B8_UINT, nullptr},
{angle::FormatID::R8G8B8A8_UINT, VK_FORMAT_R8G8B8A8_UINT,
Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0x01>}};
initImageFallback(renderer, kInfo, ArraySize(kInfo));
}
bufferFormatID = angle::FormatID::R8G8B8_UINT;
vkBufferFormat = VK_FORMAT_R8G8B8_UINT;
vkBufferFormatIsPacked = false;
......
......@@ -105,8 +105,24 @@ Format::Format()
void Format::initImageFallback(RendererVk *renderer, const ImageFormatInitInfo *info, int numInfo)
{
size_t skip = renderer->getFeatures().forceFallbackFormat.enabled ? 1 : 0;
int i = FindSupportedFormat(renderer, info + skip, numInfo - skip, HasFullTextureFormatSupport);
size_t skip = renderer->getFeatures().forceFallbackFormat.enabled ? 1 : 0;
SupportTest testFunction = HasFullTextureFormatSupport;
const angle::Format &format = angle::Format::Get(info[0].format);
if (format.isInt() || format.isUint() || (format.isFloat() && format.redBits >= 32))
{
// Integer formats don't support filtering in GL, so don't test for it.
// Filtering of 32-bit float textures is not supported on Android, and
// it's enabled by the extension OES_texture_float_linear, which is
// enabled automatically by examining format capabilities.
testFunction = HasNonFilterableTextureFormatSupport;
}
if (format.isSnorm())
{
// Rendering to SNORM textures is not supported on Android, and it's
// enabled by the extension EXT_render_snorm.
testFunction = HasNonRenderableTextureFormatSupport;
}
int i = FindSupportedFormat(renderer, info + skip, numInfo - skip, testFunction);
i += skip;
imageFormatID = info[i].format;
......@@ -263,6 +279,26 @@ bool HasFullTextureFormatSupport(RendererVk *renderer, VkFormat vkFormat)
renderer->hasImageFormatFeatureBits(vkFormat, kBitsDepth);
}
bool HasNonFilterableTextureFormatSupport(RendererVk *renderer, VkFormat vkFormat)
{
constexpr uint32_t kBitsColor =
VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT;
constexpr uint32_t kBitsDepth = VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT;
return renderer->hasImageFormatFeatureBits(vkFormat, kBitsColor) ||
renderer->hasImageFormatFeatureBits(vkFormat, kBitsDepth);
}
bool HasNonRenderableTextureFormatSupport(RendererVk *renderer, VkFormat vkFormat)
{
constexpr uint32_t kBitsColor =
VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT;
constexpr uint32_t kBitsDepth = VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT;
return renderer->hasImageFormatFeatureBits(vkFormat, kBitsColor) ||
renderer->hasImageFormatFeatureBits(vkFormat, kBitsDepth);
}
size_t GetVertexInputAlignment(const vk::Format &format)
{
const angle::Format &bufferFormat = format.bufferFormat();
......
......@@ -144,6 +144,10 @@ VkImageUsageFlags GetMaximalImageUsageFlags(RendererVk *renderer, VkFormat forma
// Checks if a vkFormat supports all the features needed to use it as a GL texture format
bool HasFullTextureFormatSupport(RendererVk *renderer, VkFormat vkFormat);
// Checks if a vkFormat supports all the features except texture filtering
bool HasNonFilterableTextureFormatSupport(RendererVk *renderer, VkFormat vkFormat);
// Checks if a vkFormat supports all the features except rendering
bool HasNonRenderableTextureFormatSupport(RendererVk *renderer, VkFormat vkFormat);
// Returns the alignment for a buffer to be used with the vertex input stage in Vulkan. This
// calculation is listed in the Vulkan spec at the end of the section 'Vertex Input Description'.
......
......@@ -545,7 +545,7 @@
3188 VULKAN : dEQP-GLES3.functional.texture.filtering.*3d* = SKIP
3188 VULKAN : dEQP-GLES3.functional.texture.mipmap.*3d* = SKIP
// 2D array:
// 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.fbo.completeness.layer.2darr* = SKIP
3189 VULKAN : dEQP-GLES3.functional.fbo.color.tex2darray.* = SKIP
......@@ -553,15 +553,6 @@
3189 VULKAN : dEQP-GLES3.functional.texture.filtering.*2d_array* = SKIP
3189 VULKAN : dEQP-GLES3.functional.texture.shadow.2d_array.* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texstorage2d.format.rgb32* = SKIP
3190 VULKAN WIN : dEQP-GLES3.functional.texture.specification.texstorage2d.format.rgb16* = FAIL
3190 VULKAN LINUX : dEQP-GLES3.functional.texture.specification.texstorage2d.format.rgb16* = FAIL
3190 VULKAN MAC : dEQP-GLES3.functional.texture.specification.texstorage2d.format.rgb16* = FAIL
3190 VULKAN ANDROID : dEQP-GLES3.functional.texture.specification.texstorage2d.format.rgb16* = SKIP
3190 VULKAN WIN : dEQP-GLES3.functional.texture.specification.texstorage2d.format.rgb8* = FAIL
3190 VULKAN LINUX : dEQP-GLES3.functional.texture.specification.texstorage2d.format.rgb8* = FAIL
3190 VULKAN MAC : dEQP-GLES3.functional.texture.specification.texstorage2d.format.rgb8* = FAIL
3190 VULKAN ANDROID : dEQP-GLES3.functional.texture.specification.texstorage2d.format.rgb8* = SKIP
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_component24* = SKIP
......@@ -576,10 +567,7 @@
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 WIN : dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb16* = FAIL
3190 VULKAN LINUX : dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb16* = FAIL
3190 VULKAN MAC : dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb16* = FAIL
3190 VULKAN ANDROID : dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb16* = 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.rgb8* = SKIP
......@@ -598,24 +586,21 @@
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* = 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_teximage3d* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.basic_texsubimage2d* = 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_texsubimage3d* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.random_teximage2d* = 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.teximage3d_pbo.* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texsubimage2d_pbo.* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texsubimage3d_pbo.* = SKIP
3190 VULKAN WIN : dEQP-GLES3.functional.texture.specification.teximage2d_depth* = FAIL
3190 VULKAN LINUX : dEQP-GLES3.functional.texture.specification.teximage2d_depth* = FAIL
3190 VULKAN MAC : dEQP-GLES3.functional.texture.specification.teximage2d_depth* = FAIL
3190 VULKAN ANDROID : dEQP-GLES3.functional.texture.specification.teximage2d_depth* = SKIP
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.teximage3d_depth* = SKIP
3190 VULKAN WIN : dEQP-GLES3.functional.texture.specification.texsubimage2d_depth* = FAIL
3190 VULKAN LINUX : dEQP-GLES3.functional.texture.specification.texsubimage2d_depth* = FAIL
3190 VULKAN MAC : dEQP-GLES3.functional.texture.specification.texsubimage2d_depth* = FAIL
3190 VULKAN ANDROID : dEQP-GLES3.functional.texture.specification.texsubimage2d_depth* = SKIP
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* = SKIP
3190 VULKAN : dEQP-GLES3.functional.texture.specification.texsubimage3d_unpack* = SKIP
......
......@@ -5022,16 +5022,25 @@ ANGLE_INSTANTIATE_TEST(SamplerArrayAsFunctionParameterTest,
ES2_VULKAN());
ANGLE_INSTANTIATE_TEST(Texture2DTestES3, ES3_D3D11(), ES3_OPENGL(), ES3_OPENGLES());
ANGLE_INSTANTIATE_TEST(Texture3DTestES3, ES3_D3D11(), ES3_OPENGL(), ES3_OPENGLES());
ANGLE_INSTANTIATE_TEST(Texture2DIntegerAlpha1TestES3, ES3_D3D11(), ES3_OPENGL(), ES3_OPENGLES());
ANGLE_INSTANTIATE_TEST(Texture2DIntegerAlpha1TestES3,
ES3_D3D11(),
ES3_OPENGL(),
ES3_OPENGLES(),
ES3_VULKAN());
ANGLE_INSTANTIATE_TEST(Texture2DUnsignedIntegerAlpha1TestES3,
ES3_D3D11(),
ES3_OPENGL(),
ES3_OPENGLES());
ES3_OPENGLES(),
ES3_VULKAN());
ANGLE_INSTANTIATE_TEST(ShadowSamplerPlusSampler3DTestES3,
ES3_D3D11(),
ES3_OPENGL(),
ES3_OPENGLES());
ANGLE_INSTANTIATE_TEST(SamplerTypeMixTestES3, ES3_D3D11(), ES3_OPENGL(), ES3_OPENGLES());
ANGLE_INSTANTIATE_TEST(SamplerTypeMixTestES3,
ES3_D3D11(),
ES3_OPENGL(),
ES3_OPENGLES(),
ES3_VULKAN());
ANGLE_INSTANTIATE_TEST(Texture2DArrayTestES3, ES3_D3D11(), ES3_OPENGL(), ES3_OPENGLES());
ANGLE_INSTANTIATE_TEST(TextureSizeTextureArrayTest, ES3_D3D11(), ES3_OPENGL());
ANGLE_INSTANTIATE_TEST(SamplerInStructTest,
......
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