Commit 43acf3ba by Jamie Madill Committed by Commit Bot

GL: Compiler changes for GL_OES_texture_buffer

This extension is core in GLES 3.2 This CL enables the extension, added 412 new dEQP tests for texture buffer. 410 of these tests pass, but there are two tests that fail, detailed in anglebug.com/4933 Also includes a fix for completeness checks. Based on a CL by Jonah Ryan-Davis. Bug: angleproject:3573 Bug: angleproject:4933 Change-Id: I45759d765c88c64f21b592eab01d910dc4bc8da3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2521239 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarShahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarCody Northrop <cnorthrop@google.com>
parent 7616dfbd
......@@ -26,7 +26,7 @@
// Version number for shader translation API.
// It is incremented every time the API changes.
#define ANGLE_SH_VERSION 237
#define ANGLE_SH_VERSION 238
enum ShShaderSpec
{
......@@ -407,6 +407,9 @@ struct ShBuiltInResources
int EXT_shadow_samplers;
int OES_shader_multisample_interpolation;
int OES_shader_image_atomic;
int OES_texture_buffer;
int EXT_texture_buffer;
// Set to 1 to enable replacing GL_EXT_draw_buffers #extension directives
// with GL_NV_draw_buffers in ESSL output. This flag can be used to emulate
// EXT_draw_buffers by using it in combination with GLES3.0 glDrawBuffers
......
......@@ -4,15 +4,15 @@
"src/compiler/translator/generate_parser.py":
"566178ecdfae3a29803b3687fc518ebb",
"src/compiler/translator/glslang.l":
"d0119d698e056a454a4414a254324df4",
"e31e622f26fefd9fb271474e11ac9e10",
"src/compiler/translator/glslang.y":
"d00fad5170eb80f9d420d126eb0d311c",
"a28cb3d179632938d06010e748d6dff7",
"src/compiler/translator/glslang_lex_autogen.cpp":
"6e265988e6f6afe3ff984a07ce3caf16",
"c75df7edcc64c07fab616a37f460dfe3",
"src/compiler/translator/glslang_tab_autogen.cpp":
"3a39adeee3876580c27993da0555320a",
"a40597be88d6fe1f229239ae0f65297a",
"src/compiler/translator/glslang_tab_autogen.h":
"ed181c8ef2a71585f18b2015f5f1c098",
"c6f1ee189993fa5d6075f00a0d621b32",
"tools/flex-bison/linux/bison.sha1":
"efa86001f00e7bcfdbe899dd15fc88e0",
"tools/flex-bison/linux/flex.sha1":
......
{
"src/compiler/translator/ImmutableString_ESSL_autogen.cpp":
"bab94ae93917a40dd2f3184be08a4933",
"681fc68d9b569792f8080e2217d75abe",
"src/compiler/translator/ImmutableString_autogen.cpp":
"fa74ff3796c28e14bb617749987c94f8",
"src/compiler/translator/ParseContext_ESSL_autogen.h":
"fb36d587618dabfd828d7d5f645fa2e5",
"3f9db6a162f1a73c17d0f142d76213ad",
"src/compiler/translator/ParseContext_complete_autogen.h":
"2db8d7d0efd13afdd4b971c89f785f7e",
"src/compiler/translator/SymbolTable_ESSL_autogen.cpp":
"6a4ad24f5d85a39e797226cc9416df1d",
"d84e2717f4a225dba071f200e0646da4",
"src/compiler/translator/SymbolTable_autogen.cpp":
"0ea25cc0c63638efa3f38923e796008b",
"63cc020a43f6d4cfbe9cd98f11c1f69b",
"src/compiler/translator/SymbolTable_autogen.h":
"2d8bed6ff5debc6546199a2add316a66",
"src/compiler/translator/builtin_function_declarations.txt":
"dfc73c66a0efbdc7543ed7a6fbd3f00c",
"6bd6a29dcb3b536df8269b106f095e5a",
"src/compiler/translator/builtin_variables.json":
"98d347a6ed181eca3d89bfd73193d787",
"src/compiler/translator/gen_builtin_symbols.py":
"03bdb7260ac347f4be968229a6a97aab",
"src/compiler/translator/tree_util/BuiltIn_ESSL_autogen.h":
"359670b3327789b173bb961e3c66a19f",
"848af57c8fea997e9e1fc7e9f6dbff1b",
"src/compiler/translator/tree_util/BuiltIn_complete_autogen.h":
"2ec6e29190e01f1731b3e3a18d6f0684",
"2c91eb13bbe7901453a2272e39bfc3d4",
"src/tests/compiler_tests/ImmutableString_test_ESSL_autogen.cpp":
"90bfc0010975c358a3a8d6336f9afb01",
"253167c79fadea9e4f90131e7c7c8704",
"src/tests/compiler_tests/ImmutableString_test_autogen.cpp":
"7994b8d74b3f497da8e7b031a7f83e3d"
"0366f33a5cfbf9c093f01c94bd41856d"
}
\ No newline at end of file
{
"src/common/gen_uniform_type_table.py":
"43f21df292ca1864166cc93ed59f2b66",
"0dbc1867be7607fdf97587799474252d",
"src/common/uniform_type_info_autogen.cpp":
"ecffb0755d6051d656f9b68e3d7eea72"
"9ab3b9142292306d0a29493ff40d5105"
}
\ No newline at end of file
......@@ -16,21 +16,23 @@ all_uniform_types = [
"GL_FLOAT_MAT2", "GL_FLOAT_MAT2x3", "GL_FLOAT_MAT2x4", "GL_FLOAT_MAT3", "GL_FLOAT_MAT3x2",
"GL_FLOAT_MAT3x4", "GL_FLOAT_MAT4", "GL_FLOAT_MAT4x2", "GL_FLOAT_MAT4x3", "GL_FLOAT_VEC2",
"GL_FLOAT_VEC3", "GL_FLOAT_VEC4", "GL_IMAGE_2D", "GL_IMAGE_2D_ARRAY", "GL_IMAGE_3D",
"GL_IMAGE_CUBE", "GL_IMAGE_CUBE_MAP_ARRAY", "GL_INT", "GL_INT_IMAGE_2D",
"GL_IMAGE_CUBE", "GL_IMAGE_CUBE_MAP_ARRAY", "GL_IMAGE_BUFFER", "GL_INT", "GL_INT_IMAGE_2D",
"GL_INT_IMAGE_2D_ARRAY", "GL_INT_IMAGE_3D", "GL_INT_IMAGE_CUBE", "GL_INT_IMAGE_CUBE_MAP_ARRAY",
"GL_INT_SAMPLER_2D", "GL_INT_SAMPLER_2D_ARRAY", "GL_INT_SAMPLER_2D_MULTISAMPLE",
"GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY", "GL_INT_SAMPLER_3D", "GL_INT_SAMPLER_CUBE",
"GL_INT_SAMPLER_CUBE_MAP_ARRAY", "GL_INT_VEC2", "GL_INT_VEC3", "GL_INT_VEC4", "GL_SAMPLER_2D",
"GL_SAMPLER_2D_ARRAY", "GL_SAMPLER_2D_ARRAY_SHADOW", "GL_SAMPLER_2D_MULTISAMPLE",
"GL_SAMPLER_2D_MULTISAMPLE_ARRAY", "GL_SAMPLER_2D_RECT_ANGLE", "GL_SAMPLER_2D_SHADOW",
"GL_SAMPLER_3D", "GL_SAMPLER_CUBE", "GL_SAMPLER_CUBE_MAP_ARRAY", "GL_SAMPLER_CUBE_SHADOW",
"GL_INT_IMAGE_BUFFER", "GL_INT_SAMPLER_2D", "GL_INT_SAMPLER_2D_ARRAY",
"GL_INT_SAMPLER_2D_MULTISAMPLE", "GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY", "GL_INT_SAMPLER_3D",
"GL_INT_SAMPLER_CUBE", "GL_INT_SAMPLER_CUBE_MAP_ARRAY", "GL_INT_SAMPLER_BUFFER", "GL_INT_VEC2",
"GL_INT_VEC3", "GL_INT_VEC4", "GL_SAMPLER_2D", "GL_SAMPLER_2D_ARRAY",
"GL_SAMPLER_2D_ARRAY_SHADOW", "GL_SAMPLER_2D_MULTISAMPLE", "GL_SAMPLER_2D_MULTISAMPLE_ARRAY",
"GL_SAMPLER_2D_RECT_ANGLE", "GL_SAMPLER_2D_SHADOW", "GL_SAMPLER_3D", "GL_SAMPLER_CUBE",
"GL_SAMPLER_CUBE_MAP_ARRAY", "GL_SAMPLER_BUFFER", "GL_SAMPLER_CUBE_SHADOW",
"GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW", "GL_SAMPLER_EXTERNAL_OES", "GL_UNSIGNED_INT",
"GL_UNSIGNED_INT_ATOMIC_COUNTER", "GL_UNSIGNED_INT_IMAGE_2D", "GL_UNSIGNED_INT_IMAGE_2D_ARRAY",
"GL_UNSIGNED_INT_IMAGE_3D", "GL_UNSIGNED_INT_IMAGE_CUBE",
"GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY", "GL_UNSIGNED_INT_SAMPLER_2D",
"GL_UNSIGNED_INT_SAMPLER_2D_ARRAY", "GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE",
"GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY", "GL_UNSIGNED_INT_SAMPLER_3D",
"GL_UNSIGNED_INT_SAMPLER_CUBE", "GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY",
"GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY", "GL_UNSIGNED_INT_IMAGE_BUFFER",
"GL_UNSIGNED_INT_SAMPLER_2D", "GL_UNSIGNED_INT_SAMPLER_2D_ARRAY",
"GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE", "GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY",
"GL_UNSIGNED_INT_SAMPLER_3D", "GL_UNSIGNED_INT_SAMPLER_CUBE",
"GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY", "GL_UNSIGNED_INT_SAMPLER_BUFFER",
"GL_UNSIGNED_INT_VEC2", "GL_UNSIGNED_INT_VEC3", "GL_UNSIGNED_INT_VEC4",
"GL_SAMPLER_VIDEO_IMAGE_WEBGL"
]
......@@ -51,6 +53,7 @@ texture_types = {
"EXTERNAL_OES": "EXTERNAL_OES",
"RECT": "RECTANGLE",
"CUBE_MAP_ARRAY": "CUBE_MAP_ARRAY",
"BUFFER": "BUFFER",
"VIDEO_IMAGE_WEBGL": "VIDEO_IMAGE_WEBGL",
}
......
......@@ -165,6 +165,9 @@ GLenum VariableComponentType(GLenum type)
case GL_IMAGE_CUBE_MAP_ARRAY:
case GL_INT_IMAGE_CUBE_MAP_ARRAY:
case GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY:
case GL_IMAGE_BUFFER:
case GL_INT_IMAGE_BUFFER:
case GL_UNSIGNED_INT_IMAGE_BUFFER:
case GL_UNSIGNED_INT_ATOMIC_COUNTER:
case GL_SAMPLER_VIDEO_IMAGE_WEBGL:
return GL_INT;
......@@ -316,6 +319,7 @@ int VariableRowCount(GLenum type)
case GL_SAMPLER_2D_MULTISAMPLE:
case GL_SAMPLER_2D_MULTISAMPLE_ARRAY:
case GL_SAMPLER_CUBE_MAP_ARRAY:
case GL_SAMPLER_BUFFER:
case GL_INT_SAMPLER_2D:
case GL_INT_SAMPLER_3D:
case GL_INT_SAMPLER_CUBE:
......@@ -323,6 +327,7 @@ int VariableRowCount(GLenum type)
case GL_INT_SAMPLER_2D_MULTISAMPLE:
case GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
case GL_INT_SAMPLER_CUBE_MAP_ARRAY:
case GL_INT_SAMPLER_BUFFER:
case GL_UNSIGNED_INT_SAMPLER_2D:
case GL_UNSIGNED_INT_SAMPLER_3D:
case GL_UNSIGNED_INT_SAMPLER_CUBE:
......@@ -330,6 +335,7 @@ int VariableRowCount(GLenum type)
case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE:
case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
case GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY:
case GL_UNSIGNED_INT_SAMPLER_BUFFER:
case GL_SAMPLER_2D_SHADOW:
case GL_SAMPLER_CUBE_SHADOW:
case GL_SAMPLER_2D_ARRAY_SHADOW:
......@@ -350,6 +356,9 @@ int VariableRowCount(GLenum type)
case GL_IMAGE_CUBE_MAP_ARRAY:
case GL_INT_IMAGE_CUBE_MAP_ARRAY:
case GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY:
case GL_IMAGE_BUFFER:
case GL_INT_IMAGE_BUFFER:
case GL_UNSIGNED_INT_IMAGE_BUFFER:
case GL_SAMPLER_VIDEO_IMAGE_WEBGL:
return 1;
case GL_FLOAT_MAT2:
......@@ -388,6 +397,7 @@ int VariableColumnCount(GLenum type)
case GL_SAMPLER_2D_MULTISAMPLE:
case GL_SAMPLER_2D_MULTISAMPLE_ARRAY:
case GL_SAMPLER_CUBE_MAP_ARRAY:
case GL_SAMPLER_BUFFER:
case GL_INT_SAMPLER_2D:
case GL_INT_SAMPLER_3D:
case GL_INT_SAMPLER_CUBE:
......@@ -395,6 +405,7 @@ int VariableColumnCount(GLenum type)
case GL_INT_SAMPLER_2D_MULTISAMPLE:
case GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
case GL_INT_SAMPLER_CUBE_MAP_ARRAY:
case GL_INT_SAMPLER_BUFFER:
case GL_SAMPLER_EXTERNAL_OES:
case GL_SAMPLER_2D_RECT_ANGLE:
case GL_UNSIGNED_INT_SAMPLER_2D:
......@@ -404,6 +415,7 @@ int VariableColumnCount(GLenum type)
case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE:
case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
case GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY:
case GL_UNSIGNED_INT_SAMPLER_BUFFER:
case GL_SAMPLER_2D_SHADOW:
case GL_SAMPLER_CUBE_SHADOW:
case GL_SAMPLER_2D_ARRAY_SHADOW:
......@@ -420,6 +432,9 @@ int VariableColumnCount(GLenum type)
case GL_IMAGE_CUBE_MAP_ARRAY:
case GL_INT_IMAGE_CUBE_MAP_ARRAY:
case GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY:
case GL_IMAGE_BUFFER:
case GL_INT_IMAGE_BUFFER:
case GL_UNSIGNED_INT_IMAGE_BUFFER:
case GL_IMAGE_CUBE:
case GL_INT_IMAGE_CUBE:
case GL_UNSIGNED_INT_IMAGE_CUBE:
......@@ -469,6 +484,7 @@ bool IsSamplerType(GLenum type)
case GL_SAMPLER_2D_MULTISAMPLE:
case GL_SAMPLER_2D_MULTISAMPLE_ARRAY:
case GL_SAMPLER_CUBE_MAP_ARRAY:
case GL_SAMPLER_BUFFER:
case GL_SAMPLER_2D_RECT_ANGLE:
case GL_INT_SAMPLER_2D:
case GL_INT_SAMPLER_3D:
......@@ -477,6 +493,7 @@ bool IsSamplerType(GLenum type)
case GL_INT_SAMPLER_2D_MULTISAMPLE:
case GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
case GL_INT_SAMPLER_CUBE_MAP_ARRAY:
case GL_INT_SAMPLER_BUFFER:
case GL_UNSIGNED_INT_SAMPLER_2D:
case GL_UNSIGNED_INT_SAMPLER_3D:
case GL_UNSIGNED_INT_SAMPLER_CUBE:
......@@ -484,6 +501,7 @@ bool IsSamplerType(GLenum type)
case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE:
case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
case GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY:
case GL_UNSIGNED_INT_SAMPLER_BUFFER:
case GL_SAMPLER_2D_SHADOW:
case GL_SAMPLER_CUBE_SHADOW:
case GL_SAMPLER_2D_ARRAY_SHADOW:
......@@ -525,6 +543,9 @@ bool IsImageType(GLenum type)
case GL_IMAGE_CUBE_MAP_ARRAY:
case GL_INT_IMAGE_CUBE_MAP_ARRAY:
case GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY:
case GL_IMAGE_BUFFER:
case GL_INT_IMAGE_BUFFER:
case GL_UNSIGNED_INT_IMAGE_BUFFER:
case GL_IMAGE_CUBE:
case GL_INT_IMAGE_CUBE:
case GL_UNSIGNED_INT_IMAGE_CUBE:
......
......@@ -1092,6 +1092,8 @@ void TCompiler::setResourceString()
<< ":EXT_shadow_samplers:" << mResources.EXT_shadow_samplers
<< ":OES_shader_multisample_interpolation:" << mResources.OES_shader_multisample_interpolation
<< ":OES_shader_image_atomic:" << mResources.OES_shader_image_atomic
<< ":OES_texture_buffer:" << mResources.OES_texture_buffer
<< ":EXT_texture_buffer:" << mResources.EXT_texture_buffer
<< ":MinProgramTextureGatherOffset:" << mResources.MinProgramTextureGatherOffset
<< ":MaxProgramTextureGatherOffset:" << mResources.MaxProgramTextureGatherOffset
<< ":MaxImageUnits:" << mResources.MaxImageUnits
......
......@@ -28,6 +28,7 @@
OP(EXT_shader_non_constant_global_initializers) \
OP(EXT_shader_texture_lod) \
OP(EXT_shadow_samplers) \
OP(EXT_texture_buffer) \
OP(EXT_texture_cube_map_array) \
OP(EXT_YUV_target) \
OP(NV_EGL_stream_consumer_external) \
......@@ -39,6 +40,7 @@
OP(OES_shader_image_atomic) \
OP(OES_standard_derivatives) \
OP(OES_texture_3D) \
OP(OES_texture_buffer) \
OP(OES_texture_cube_map_array) \
OP(OES_texture_storage_multisample_2d_array) \
OP(OVR_multiview) \
......
......@@ -34,6 +34,7 @@ enum class TExtension : uint8_t
EXT_shader_non_constant_global_initializers,
EXT_shader_texture_lod,
EXT_shadow_samplers,
EXT_texture_buffer,
EXT_texture_cube_map_array,
EXT_YUV_target,
NV_EGL_stream_consumer_external,
......@@ -45,6 +46,7 @@ enum class TExtension : uint8_t
OES_shader_image_atomic,
OES_standard_derivatives,
OES_texture_3D,
OES_texture_buffer,
OES_texture_cube_map_array,
OES_texture_storage_multisample_2d_array,
OVR_multiview,
......
......@@ -137,6 +137,14 @@ void InitExtensionBehavior(const ShBuiltInResources &resources, TExtensionBehavi
{
extBehavior[TExtension::OES_shader_image_atomic] = EBhUndefined;
}
if (resources.OES_texture_buffer)
{
extBehavior[TExtension::OES_texture_buffer] = EBhUndefined;
}
if (resources.EXT_texture_buffer)
{
extBehavior[TExtension::EXT_texture_buffer] = EBhUndefined;
}
}
void ResetExtensionBehavior(const ShBuiltInResources &resources,
......
......@@ -21,77 +21,77 @@ namespace BuiltInGroup
bool isTextureOffsetNoBias(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3671 && id <= 3740;
return id >= 3680 && id <= 3749;
}
bool isTextureOffsetBias(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3741 && id <= 3760;
return id >= 3750 && id <= 3769;
}
bool isTextureGatherOffsetsComp(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3798 && id <= 3810;
return id >= 3807 && id <= 3819;
}
bool isTextureGatherOffsetsNoComp(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3811 && id <= 3826;
return id >= 3820 && id <= 3835;
}
bool isTextureGatherOffsets(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3798 && id <= 3826;
return id >= 3807 && id <= 3835;
}
bool isTextureGatherOffsetComp(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3827 && id <= 3832;
return id >= 3836 && id <= 3841;
}
bool isTextureGatherOffsetNoComp(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3833 && id <= 3840;
return id >= 3842 && id <= 3849;
}
bool isTextureGatherOffset(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3827 && id <= 3840;
return id >= 3836 && id <= 3849;
}
bool isTextureGather(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3774 && id <= 3840;
return id >= 3783 && id <= 3849;
}
bool isInterpolationFS(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3853 && id <= 3876;
return id >= 3862 && id <= 3885;
}
bool isAtomicMemory(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3881 && id <= 3898;
return id >= 3890 && id <= 3907;
}
bool isImageLoad(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3929 && id <= 3943;
return id >= 3944 && id <= 3961;
}
bool isImageAtomic(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3944 && id <= 4522;
return id >= 3962 && id <= 4537;
}
bool isImageStore(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 4523 && id <= 4537;
return id >= 4538 && id <= 4555;
}
bool isImage(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3899 && id <= 4537;
return id >= 3908 && id <= 4555;
}
} // namespace BuiltInGroup
......
......@@ -182,6 +182,8 @@ void InitBuiltInResources(ShBuiltInResources *resources)
resources->OES_shader_multisample_interpolation = 0;
resources->NV_draw_buffers = 0;
resources->OES_shader_image_atomic = 0;
resources->OES_texture_buffer = 0;
resources->EXT_texture_buffer = 0;
resources->MaxClipDistances = 0;
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -255,6 +255,7 @@ void TranslatorGLSL::writeVersion(TIntermNode *root)
void TranslatorGLSL::writeExtensionBehavior(TIntermNode *root, ShCompileOptions compileOptions)
{
bool usesTextureCubeMapArray = false;
bool usesTextureBuffer = false;
TInfoSinkBase &sink = getInfoSink().obj;
const TExtensionBehavior &extBehavior = getExtensionBehavior();
......@@ -314,6 +315,13 @@ void TranslatorGLSL::writeExtensionBehavior(TIntermNode *root, ShCompileOptions
{
usesTextureCubeMapArray = true;
}
if ((iter.first == TExtension::OES_texture_buffer ||
iter.first == TExtension::EXT_texture_buffer) &&
(iter.second == EBhRequire || iter.second == EBhEnable))
{
usesTextureBuffer = true;
}
}
// GLSL ES 3 explicit location qualifiers need to use an extension before GLSL 330
......@@ -349,6 +357,20 @@ void TranslatorGLSL::writeExtensionBehavior(TIntermNode *root, ShCompileOptions
}
}
if (usesTextureBuffer)
{
if (getOutputType() >= SH_GLSL_COMPATIBILITY_OUTPUT &&
getOutputType() < SH_GLSL_400_CORE_OUTPUT)
{
sink << "#extension GL_ARB_texture_buffer_objects : enable\n";
}
else if (getOutputType() == SH_ESSL_OUTPUT && getShaderVersion() < 320)
{
sink << "#extension GL_OES_texture_buffer : enable\n";
sink << "#extension GL_EXT_texture_buffer : enable\n";
}
}
TExtensionGLSL extensionGLSL(getOutputType());
root->traverse(&extensionGLSL);
......
......@@ -56,6 +56,8 @@ const char *getBasicString(TBasicType t)
return "sampler2DMSArray";
case EbtSamplerCubeArray:
return "samplerCubeArray";
case EbtSamplerBuffer:
return "samplerBuffer";
case EbtISampler2D:
return "isampler2D";
case EbtISampler3D:
......@@ -70,6 +72,8 @@ const char *getBasicString(TBasicType t)
return "isampler2DMSArray";
case EbtISamplerCubeArray:
return "isamplerCubeArray";
case EbtISamplerBuffer:
return "isamplerBuffer";
case EbtUSampler2D:
return "usampler2D";
case EbtUSampler3D:
......@@ -84,6 +88,8 @@ const char *getBasicString(TBasicType t)
return "usampler2DMSArray";
case EbtUSamplerCubeArray:
return "usamplerCubeArray";
case EbtUSamplerBuffer:
return "usamplerBuffer";
case EbtSampler2DShadow:
return "sampler2DShadow";
case EbtSamplerCubeShadow:
......@@ -126,6 +132,12 @@ const char *getBasicString(TBasicType t)
return "iimageCubeArray";
case EbtUImageCubeArray:
return "uimageCubeArray";
case EbtImageBuffer:
return "imageBuffer";
case EbtIImageBuffer:
return "iimageBuffer";
case EbtUImageBuffer:
return "uimageBuffer";
case EbtAtomicCounter:
return "atomic_uint";
case EbtSamplerVideoWEBGL:
......
......@@ -669,6 +669,15 @@ GROUP BEGIN OES_cube_map_array
vec4 textureGather(samplerCubeArrayShadow, vec4, float);
GROUP END OES_cube_map_array
// These functions are part of OES/EXT_texture_buffer.
// There's no way to mark alternative extensions for builtins, so these are marked with none.
// TODO(anglebug.com/4589)
GROUP BEGIN OES_texture_buffer
DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction"}
int textureSize(gsamplerBuffer);
gvec4 texelFetch(gsamplerBuffer, int);
GROUP END OES_texture_buffer
GROUP BEGIN TexelFetchMS
DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL1_5_BUILTINS", "op": "CallBuiltInFunction"}
gvec4 texelFetch(gsampler2DMS, ivec2, int);
......@@ -1041,6 +1050,12 @@ GROUP BEGIN Image {"queryFunction": true}
DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction"}
gvec4 imageStore(gimageCubeArray, ivec3, gvec4);
// These functions are part of OES/EXT_texture_buffer.
// There's no way to mark alternative extensions for builtins, so these are marked with none.
// TODO(anglebug.com/4589)
DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction"}
void imageStore(gimageBuffer, int, gvec4);
DEFAULT METADATA {"glsl_level": "GLSL4_2_BUILTINS", "op": "CallBuiltInFunction"}
void imageStore(writeonly IMAGE_PARAMS, gvec4);
GROUP END Store
......@@ -1057,6 +1072,12 @@ GROUP BEGIN Image {"queryFunction": true}
DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction"}
gvec4 imageLoad(gimageCubeArray, ivec3);
// These functions are part of OES/EXT_texture_buffer.
// There's no way to mark alternative extensions for builtins, so these are marked with none.
// TODO(anglebug.com/4589)
DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction"}
gvec4 imageLoad(gimageBuffer, int);
DEFAULT METADATA {"glsl_level": "GLSL4_2_BUILTINS", "op": "CallBuiltInFunction"}
gvec4 imageLoad(readonly IMAGE_PARAMS);
GROUP END Load
......@@ -1072,6 +1093,12 @@ GROUP BEGIN Image {"queryFunction": true}
DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction"}
ivec3 imageSize(gimageCubeArray);
// These functions are part of OES/EXT_texture_buffer.
// There's no way to mark alternative extensions for builtins, so these are marked with none.
// TODO(anglebug.com/4589)
DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction"}
int imageSize(gimageBuffer);
DEFAULT METADATA {"glsl_level": "GLSL4_3_BUILTINS", "op": "CallBuiltInFunction"}
int imageSize(readonly writeonly gimage1D);
ivec2 imageSize(readonly writeonly gimage2D);
......
......@@ -110,6 +110,7 @@ static int ES3_reserved_ES3_extension_ES3_1_keyword(TParseContext *context, TExt
static int ES3_reserved_ES3_extension_ES3_2_keyword(TParseContext *context, TExtension extension, int token);
static int ES3_1_reserved_ES3_1_extension_ES3_2_keyword(TParseContext *context, TExtension extension, int token);
static int ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(TParseContext *context, TExtension extension1, TExtension extension2, int token1, int token2);
static int ES3_and_3_1_reserved_ES3_1_extension_ES3_2_keyword_2(TParseContext *context, TExtension extension1, TExtension extension2, int token1, int token2);
static int WEBGL_video_texture_extension(TParseContext *context, int token);
static int uint_constant(TParseContext *context);
static int int_constant(TParseContext *context);
......@@ -234,9 +235,12 @@ O [0-7]
"isampler2DMSArray" { return ES3_reserved_ES3_1_extension_ES3_2_keyword(context, TExtension::OES_texture_storage_multisample_2d_array, ISAMPLER2DMSARRAY); }
"usampler2DMSArray" { return ES3_reserved_ES3_1_extension_ES3_2_keyword(context, TExtension::OES_texture_storage_multisample_2d_array, USAMPLER2DMSARRAY); }
"samplerCubeArray" { return ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(context, TExtension::OES_texture_cube_map_array, TExtension::EXT_texture_cube_map_array, SAMPLERCUBEARRAYOES, SAMPLERCUBEARRAYEXT); }
"samplerBuffer" { return ES3_and_3_1_reserved_ES3_1_extension_ES3_2_keyword_2(context, TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer, SAMPLERBUFFER, SAMPLERBUFFER); }
"samplerCubeArrayShadow" { return ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(context, TExtension::OES_texture_cube_map_array, TExtension::EXT_texture_cube_map_array, SAMPLERCUBEARRAYSHADOWOES, SAMPLERCUBEARRAYSHADOWEXT); }
"isamplerCubeArray" { return ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(context, TExtension::OES_texture_cube_map_array, TExtension::EXT_texture_cube_map_array, ISAMPLERCUBEARRAYOES, ISAMPLERCUBEARRAYEXT); }
"isamplerBuffer" { return ES3_and_3_1_reserved_ES3_1_extension_ES3_2_keyword_2(context, TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer, ISAMPLERBUFFER, ISAMPLERBUFFER); }
"usamplerCubeArray" { return ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(context, TExtension::OES_texture_cube_map_array, TExtension::EXT_texture_cube_map_array, USAMPLERCUBEARRAYOES, USAMPLERCUBEARRAYEXT); }
"usamplerBuffer" { return ES3_and_3_1_reserved_ES3_1_extension_ES3_2_keyword_2(context, TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer, USAMPLERBUFFER, USAMPLERBUFFER); }
"samplerVideoWEBGL" { return WEBGL_video_texture_extension(context, SAMPLERVIDEOWEBGL); }
"struct" { return STRUCT; }
......@@ -262,6 +266,9 @@ O [0-7]
"imageCubeArray" { return ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(context, TExtension::OES_texture_cube_map_array, TExtension::EXT_texture_cube_map_array, IMAGECUBEARRAYOES, IMAGECUBEARRAYEXT); }
"iimageCubeArray" { return ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(context, TExtension::OES_texture_cube_map_array, TExtension::EXT_texture_cube_map_array, IIMAGECUBEARRAYOES, IIMAGECUBEARRAYEXT); }
"uimageCubeArray" { return ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(context, TExtension::OES_texture_cube_map_array, TExtension::EXT_texture_cube_map_array, UIMAGECUBEARRAYOES, UIMAGECUBEARRAYEXT); }
"imageBuffer" { return ES3_and_3_1_reserved_ES3_1_extension_ES3_2_keyword_2(context, TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer, IMAGEBUFFER, IMAGEBUFFER); }
"iimageBuffer" { return ES3_and_3_1_reserved_ES3_1_extension_ES3_2_keyword_2(context, TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer, IIMAGEBUFFER, IIMAGEBUFFER); }
"uimageBuffer" { return ES3_and_3_1_reserved_ES3_1_extension_ES3_2_keyword_2(context, TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer, UIMAGEBUFFER, UIMAGEBUFFER); }
"readonly" { return ES3_reserved_ES3_1_keyword(context, READONLY); }
"writeonly" { return ES3_reserved_ES3_1_keyword(context, WRITEONLY); }
"coherent" { return ES3_reserved_ES3_1_keyword(context, COHERENT); }
......@@ -290,9 +297,6 @@ O [0-7]
"image2DShadow" |
"image1DArrayShadow" |
"image2DArrayShadow" |
"imageBuffer" |
"iimageBuffer" |
"uimageBuffer" |
"sampler1DArray" |
"sampler1DArrayShadow" |
......@@ -301,10 +305,7 @@ O [0-7]
"usampler1D" |
"usampler1DArray" |
"isampler2DRect" |
"usampler2DRect" |
"samplerBuffer" |
"isamplerBuffer" |
"usamplerBuffer" {
"usampler2DRect" {
if (context->getShaderVersion() < 300) {
yylval->lex.string = AllocatePoolCharArray(yytext, yyleng);
return check_type(yyscanner);
......@@ -764,6 +765,31 @@ static int ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(TParseContext *context
return check_type(yyscanner);
}
static int ES3_and_3_1_reserved_ES3_1_extension_ES3_2_keyword_2(TParseContext *context, TExtension extension1, TExtension extension2, int token1, int token2)
{
struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
yyscan_t yyscanner = (yyscan_t) context->getScanner();
// A keyword in GLSL ES 3.20 or GLSL ES 3.10 with enabled extension.
if (is_extension_enabled_or_is_core(context, 310, extension1, 320))
{
return token1;
}
else if (is_extension_enabled_or_is_core(context, 310, extension2, 320))
{
return token2;
}
// A reserved word in GLSL ES 3.00 and 3.10
if (context->getShaderVersion() >= 300)
{
return reserved_word(yyscanner);
}
yylval->lex.string = AllocatePoolCharArray(yytext, yyleng);
return check_type(yyscanner);
}
int uint_constant(TParseContext *context)
{
struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
......
......@@ -175,11 +175,13 @@ extern void yyerror(YYLTYPE* yylloc, TParseContext* context, void *scanner, cons
%token <lex> SAMPLER3D SAMPLER3DRECT SAMPLER2DSHADOW SAMPLERCUBESHADOW SAMPLER2DARRAYSHADOW SAMPLERVIDEOWEBGL
%token <lex> SAMPLERCUBEARRAYOES SAMPLERCUBEARRAYSHADOWOES ISAMPLERCUBEARRAYOES USAMPLERCUBEARRAYOES
%token <lex> SAMPLERCUBEARRAYEXT SAMPLERCUBEARRAYSHADOWEXT ISAMPLERCUBEARRAYEXT USAMPLERCUBEARRAYEXT
%token <lex> SAMPLERBUFFER ISAMPLERBUFFER USAMPLERBUFFER
%token <lex> SAMPLEREXTERNAL2DY2YEXT
%token <lex> IMAGE2D IIMAGE2D UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D IMAGE2DARRAY IIMAGE2DARRAY UIMAGE2DARRAY
%token <lex> IMAGECUBE IIMAGECUBE UIMAGECUBE
%token <lex> IMAGECUBEARRAYOES IIMAGECUBEARRAYOES UIMAGECUBEARRAYOES
%token <lex> IMAGECUBEARRAYEXT IIMAGECUBEARRAYEXT UIMAGECUBEARRAYEXT
%token <lex> IMAGEBUFFER IIMAGEBUFFER UIMAGEBUFFER
%token <lex> ATOMICUINT
%token <lex> LAYOUT
%token <lex> YUVCSCSTANDARDEXT YUVCSCSTANDARDEXTCONSTANT
......@@ -1126,6 +1128,16 @@ type_specifier_nonarray
}
$$.initialize(EbtSamplerCubeArray, @1);
}
| SAMPLERBUFFER {
constexpr std::array<TExtension, 2u> extensions{ { TExtension::OES_texture_buffer,
TExtension::EXT_texture_buffer } };
if (context->getShaderVersion() < 320
&& !context->checkCanUseOneOfExtensions(@1, extensions))
{
context->error(@1, "unsupported type", "__samplerBuffer");
}
$$.initialize(EbtSamplerBuffer, @1);
}
| ISAMPLER2D {
$$.initialize(EbtISampler2D, @1);
}
......@@ -1160,6 +1172,16 @@ type_specifier_nonarray
}
$$.initialize(EbtISamplerCubeArray, @1);
}
| ISAMPLERBUFFER {
constexpr std::array<TExtension, 2u> extensions{ { TExtension::OES_texture_buffer,
TExtension::EXT_texture_buffer } };
if (context->getShaderVersion() < 320
&& !context->checkCanUseOneOfExtensions(@1, extensions))
{
context->error(@1, "unsupported type", "__isamplerBuffer");
}
$$.initialize(EbtISamplerBuffer, @1);
}
| USAMPLER2D {
$$.initialize(EbtUSampler2D, @1);
}
......@@ -1194,6 +1216,16 @@ type_specifier_nonarray
}
$$.initialize(EbtUSamplerCubeArray, @1);
}
| USAMPLERBUFFER {
constexpr std::array<TExtension, 2u> extensions{ { TExtension::OES_texture_buffer,
TExtension::EXT_texture_buffer } };
if (context->getShaderVersion() < 320
&& !context->checkCanUseOneOfExtensions(@1, extensions))
{
context->error(@1, "unsupported type", "__usamplerBuffer");
}
$$.initialize(EbtUSamplerBuffer, @1);
}
| SAMPLER2DSHADOW {
$$.initialize(EbtSampler2DShadow, @1);
}
......@@ -1334,6 +1366,36 @@ type_specifier_nonarray
}
$$.initialize(EbtUImageCubeArray, @1);
}
| IMAGEBUFFER {
constexpr std::array<TExtension, 2u> extensions{ { TExtension::OES_texture_buffer,
TExtension::EXT_texture_buffer } };
if (context->getShaderVersion() < 320
&& !context->checkCanUseOneOfExtensions(@1, extensions))
{
context->error(@1, "unsupported type", "__imageBuffer");
}
$$.initialize(EbtImageBuffer, @1);
}
| IIMAGEBUFFER {
constexpr std::array<TExtension, 2u> extensions{ { TExtension::OES_texture_buffer,
TExtension::EXT_texture_buffer } };
if (context->getShaderVersion() < 320
&& !context->checkCanUseOneOfExtensions(@1, extensions))
{
context->error(@1, "unsupported type", "__iimageBuffer");
}
$$.initialize(EbtIImageBuffer, @1);
}
| UIMAGEBUFFER {
constexpr std::array<TExtension, 2u> extensions{ { TExtension::OES_texture_buffer,
TExtension::EXT_texture_buffer } };
if (context->getShaderVersion() < 320
&& !context->checkCanUseOneOfExtensions(@1, extensions))
{
context->error(@1, "unsupported type", "__uimageBuffer");
}
$$.initialize(EbtUImageBuffer, @1);
}
| ATOMICUINT {
$$.initialize(EbtAtomicCounter, @1);
}
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -151,81 +151,87 @@ enum yytokentype
SAMPLERCUBEARRAYSHADOWEXT = 352,
ISAMPLERCUBEARRAYEXT = 353,
USAMPLERCUBEARRAYEXT = 354,
SAMPLEREXTERNAL2DY2YEXT = 355,
IMAGE2D = 356,
IIMAGE2D = 357,
UIMAGE2D = 358,
IMAGE3D = 359,
IIMAGE3D = 360,
UIMAGE3D = 361,
IMAGE2DARRAY = 362,
IIMAGE2DARRAY = 363,
UIMAGE2DARRAY = 364,
IMAGECUBE = 365,
IIMAGECUBE = 366,
UIMAGECUBE = 367,
IMAGECUBEARRAYOES = 368,
IIMAGECUBEARRAYOES = 369,
UIMAGECUBEARRAYOES = 370,
IMAGECUBEARRAYEXT = 371,
IIMAGECUBEARRAYEXT = 372,
UIMAGECUBEARRAYEXT = 373,
ATOMICUINT = 374,
LAYOUT = 375,
YUVCSCSTANDARDEXT = 376,
YUVCSCSTANDARDEXTCONSTANT = 377,
IDENTIFIER = 378,
TYPE_NAME = 379,
FLOATCONSTANT = 380,
INTCONSTANT = 381,
UINTCONSTANT = 382,
BOOLCONSTANT = 383,
FIELD_SELECTION = 384,
LEFT_OP = 385,
RIGHT_OP = 386,
INC_OP = 387,
DEC_OP = 388,
LE_OP = 389,
GE_OP = 390,
EQ_OP = 391,
NE_OP = 392,
AND_OP = 393,
OR_OP = 394,
XOR_OP = 395,
MUL_ASSIGN = 396,
DIV_ASSIGN = 397,
ADD_ASSIGN = 398,
MOD_ASSIGN = 399,
LEFT_ASSIGN = 400,
RIGHT_ASSIGN = 401,
AND_ASSIGN = 402,
XOR_ASSIGN = 403,
OR_ASSIGN = 404,
SUB_ASSIGN = 405,
LEFT_PAREN = 406,
RIGHT_PAREN = 407,
LEFT_BRACKET = 408,
RIGHT_BRACKET = 409,
LEFT_BRACE = 410,
RIGHT_BRACE = 411,
DOT = 412,
COMMA = 413,
COLON = 414,
EQUAL = 415,
SEMICOLON = 416,
BANG = 417,
DASH = 418,
TILDE = 419,
PLUS = 420,
STAR = 421,
SLASH = 422,
PERCENT = 423,
LEFT_ANGLE = 424,
RIGHT_ANGLE = 425,
VERTICAL_BAR = 426,
CARET = 427,
AMPERSAND = 428,
QUESTION = 429
SAMPLERBUFFER = 355,
ISAMPLERBUFFER = 356,
USAMPLERBUFFER = 357,
SAMPLEREXTERNAL2DY2YEXT = 358,
IMAGE2D = 359,
IIMAGE2D = 360,
UIMAGE2D = 361,
IMAGE3D = 362,
IIMAGE3D = 363,
UIMAGE3D = 364,
IMAGE2DARRAY = 365,
IIMAGE2DARRAY = 366,
UIMAGE2DARRAY = 367,
IMAGECUBE = 368,
IIMAGECUBE = 369,
UIMAGECUBE = 370,
IMAGECUBEARRAYOES = 371,
IIMAGECUBEARRAYOES = 372,
UIMAGECUBEARRAYOES = 373,
IMAGECUBEARRAYEXT = 374,
IIMAGECUBEARRAYEXT = 375,
UIMAGECUBEARRAYEXT = 376,
IMAGEBUFFER = 377,
IIMAGEBUFFER = 378,
UIMAGEBUFFER = 379,
ATOMICUINT = 380,
LAYOUT = 381,
YUVCSCSTANDARDEXT = 382,
YUVCSCSTANDARDEXTCONSTANT = 383,
IDENTIFIER = 384,
TYPE_NAME = 385,
FLOATCONSTANT = 386,
INTCONSTANT = 387,
UINTCONSTANT = 388,
BOOLCONSTANT = 389,
FIELD_SELECTION = 390,
LEFT_OP = 391,
RIGHT_OP = 392,
INC_OP = 393,
DEC_OP = 394,
LE_OP = 395,
GE_OP = 396,
EQ_OP = 397,
NE_OP = 398,
AND_OP = 399,
OR_OP = 400,
XOR_OP = 401,
MUL_ASSIGN = 402,
DIV_ASSIGN = 403,
ADD_ASSIGN = 404,
MOD_ASSIGN = 405,
LEFT_ASSIGN = 406,
RIGHT_ASSIGN = 407,
AND_ASSIGN = 408,
XOR_ASSIGN = 409,
OR_ASSIGN = 410,
SUB_ASSIGN = 411,
LEFT_PAREN = 412,
RIGHT_PAREN = 413,
LEFT_BRACKET = 414,
RIGHT_BRACKET = 415,
LEFT_BRACE = 416,
RIGHT_BRACE = 417,
DOT = 418,
COMMA = 419,
COLON = 420,
EQUAL = 421,
SEMICOLON = 422,
BANG = 423,
DASH = 424,
TILDE = 425,
PLUS = 426,
STAR = 427,
SLASH = 428,
PERCENT = 429,
LEFT_ANGLE = 430,
RIGHT_ANGLE = 431,
VERTICAL_BAR = 432,
CARET = 433,
AMPERSAND = 434,
QUESTION = 435
};
#endif
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -2159,30 +2159,30 @@ class BuiltInId
static constexpr const TSymbolUniqueId pt01b = TSymbolUniqueId(1533);
static constexpr const TSymbolUniqueId imageSize_UImageCubeArray1 = TSymbolUniqueId(1534);
static constexpr const TSymbolUniqueId pt01c = TSymbolUniqueId(1535);
static constexpr const TSymbolUniqueId imageSize_Image1D1 = TSymbolUniqueId(1536);
static constexpr const TSymbolUniqueId pt01L = TSymbolUniqueId(1537);
static constexpr const TSymbolUniqueId imageSize_IImage1D1 = TSymbolUniqueId(1538);
static constexpr const TSymbolUniqueId pt01M = TSymbolUniqueId(1539);
static constexpr const TSymbolUniqueId imageSize_UImage1D1 = TSymbolUniqueId(1540);
static constexpr const TSymbolUniqueId pt01N = TSymbolUniqueId(1541);
static constexpr const TSymbolUniqueId imageSize_ImageRect1 = TSymbolUniqueId(1542);
static constexpr const TSymbolUniqueId pt01d = TSymbolUniqueId(1543);
static constexpr const TSymbolUniqueId imageSize_IImageRect1 = TSymbolUniqueId(1544);
static constexpr const TSymbolUniqueId pt01e = TSymbolUniqueId(1545);
static constexpr const TSymbolUniqueId imageSize_UImageRect1 = TSymbolUniqueId(1546);
static constexpr const TSymbolUniqueId pt01f = TSymbolUniqueId(1547);
static constexpr const TSymbolUniqueId imageSize_Image1DArray1 = TSymbolUniqueId(1548);
static constexpr const TSymbolUniqueId pt01O = TSymbolUniqueId(1549);
static constexpr const TSymbolUniqueId imageSize_IImage1DArray1 = TSymbolUniqueId(1550);
static constexpr const TSymbolUniqueId pt01P = TSymbolUniqueId(1551);
static constexpr const TSymbolUniqueId imageSize_UImage1DArray1 = TSymbolUniqueId(1552);
static constexpr const TSymbolUniqueId pt01Q = TSymbolUniqueId(1553);
static constexpr const TSymbolUniqueId imageSize_ImageBuffer1 = TSymbolUniqueId(1554);
static constexpr const TSymbolUniqueId pt01g = TSymbolUniqueId(1555);
static constexpr const TSymbolUniqueId imageSize_IImageBuffer1 = TSymbolUniqueId(1556);
static constexpr const TSymbolUniqueId pt01h = TSymbolUniqueId(1557);
static constexpr const TSymbolUniqueId imageSize_UImageBuffer1 = TSymbolUniqueId(1558);
static constexpr const TSymbolUniqueId pt01i = TSymbolUniqueId(1559);
static constexpr const TSymbolUniqueId imageSize_ImageBuffer1 = TSymbolUniqueId(1536);
static constexpr const TSymbolUniqueId pt01g = TSymbolUniqueId(1537);
static constexpr const TSymbolUniqueId imageSize_IImageBuffer1 = TSymbolUniqueId(1538);
static constexpr const TSymbolUniqueId pt01h = TSymbolUniqueId(1539);
static constexpr const TSymbolUniqueId imageSize_UImageBuffer1 = TSymbolUniqueId(1540);
static constexpr const TSymbolUniqueId pt01i = TSymbolUniqueId(1541);
static constexpr const TSymbolUniqueId imageSize_Image1D1 = TSymbolUniqueId(1542);
static constexpr const TSymbolUniqueId pt01L = TSymbolUniqueId(1543);
static constexpr const TSymbolUniqueId imageSize_IImage1D1 = TSymbolUniqueId(1544);
static constexpr const TSymbolUniqueId pt01M = TSymbolUniqueId(1545);
static constexpr const TSymbolUniqueId imageSize_UImage1D1 = TSymbolUniqueId(1546);
static constexpr const TSymbolUniqueId pt01N = TSymbolUniqueId(1547);
static constexpr const TSymbolUniqueId imageSize_ImageRect1 = TSymbolUniqueId(1548);
static constexpr const TSymbolUniqueId pt01d = TSymbolUniqueId(1549);
static constexpr const TSymbolUniqueId imageSize_IImageRect1 = TSymbolUniqueId(1550);
static constexpr const TSymbolUniqueId pt01e = TSymbolUniqueId(1551);
static constexpr const TSymbolUniqueId imageSize_UImageRect1 = TSymbolUniqueId(1552);
static constexpr const TSymbolUniqueId pt01f = TSymbolUniqueId(1553);
static constexpr const TSymbolUniqueId imageSize_Image1DArray1 = TSymbolUniqueId(1554);
static constexpr const TSymbolUniqueId pt01O = TSymbolUniqueId(1555);
static constexpr const TSymbolUniqueId imageSize_IImage1DArray1 = TSymbolUniqueId(1556);
static constexpr const TSymbolUniqueId pt01P = TSymbolUniqueId(1557);
static constexpr const TSymbolUniqueId imageSize_UImage1DArray1 = TSymbolUniqueId(1558);
static constexpr const TSymbolUniqueId pt01Q = TSymbolUniqueId(1559);
static constexpr const TSymbolUniqueId imageSize_Image2DMS1 = TSymbolUniqueId(1560);
static constexpr const TSymbolUniqueId pt01R = TSymbolUniqueId(1561);
static constexpr const TSymbolUniqueId imageSize_IImage2DMS1 = TSymbolUniqueId(1562);
......
......@@ -381,6 +381,8 @@ GLenum GLVariableType(const TType &type)
return GL_SAMPLER_2D_MULTISAMPLE_ARRAY;
case EbtSamplerCubeArray:
return GL_SAMPLER_CUBE_MAP_ARRAY;
case EbtSamplerBuffer:
return GL_SAMPLER_BUFFER;
case EbtISampler2D:
return GL_INT_SAMPLER_2D;
case EbtISampler3D:
......@@ -395,6 +397,8 @@ GLenum GLVariableType(const TType &type)
return GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY;
case EbtISamplerCubeArray:
return GL_INT_SAMPLER_CUBE_MAP_ARRAY;
case EbtISamplerBuffer:
return GL_INT_SAMPLER_BUFFER;
case EbtUSampler2D:
return GL_UNSIGNED_INT_SAMPLER_2D;
case EbtUSampler3D:
......@@ -409,6 +413,8 @@ GLenum GLVariableType(const TType &type)
return GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY;
case EbtUSamplerCubeArray:
return GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY;
case EbtUSamplerBuffer:
return GL_UNSIGNED_INT_SAMPLER_BUFFER;
case EbtSampler2DShadow:
return GL_SAMPLER_2D_SHADOW;
case EbtSamplerCubeShadow:
......@@ -447,6 +453,12 @@ GLenum GLVariableType(const TType &type)
return GL_INT_IMAGE_CUBE_MAP_ARRAY;
case EbtUImageCubeArray:
return GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY;
case EbtImageBuffer:
return GL_IMAGE_BUFFER;
case EbtIImageBuffer:
return GL_INT_IMAGE_BUFFER;
case EbtUImageBuffer:
return GL_UNSIGNED_INT_IMAGE_BUFFER;
case EbtAtomicCounter:
return GL_UNSIGNED_INT_ATOMIC_COUNTER;
case EbtSamplerVideoWEBGL:
......
......@@ -138,6 +138,10 @@ Compiler::Compiler(rx::GLImplFactory *implFactory, const State &state, egl::Disp
// EXT_shadow_samplers
mResources.EXT_shadow_samplers = extensions.shadowSamplersEXT;
// OES_texture_buffer
mResources.OES_texture_buffer = extensions.textureBufferOES;
mResources.EXT_texture_buffer = extensions.textureBufferEXT;
// GLSL ES 3.0 constants
mResources.MaxVertexOutputVectors = caps.maxVertexOutputComponents / 4;
mResources.MaxFragmentInputVectors = caps.maxFragmentInputComponents / 4;
......
......@@ -309,6 +309,12 @@ SamplerFormat TextureState::computeRequiredSamplerFormat(const SamplerState &sam
bool TextureState::computeSamplerCompleteness(const SamplerState &samplerState,
const State &state) const
{
// Buffer textures cannot be incomplete.
if (mType == TextureType::Buffer)
{
return true;
}
if (mBaseLevel > mMaxLevel)
{
return false;
......
......@@ -1579,6 +1579,8 @@ void GenerateCaps(const FunctionsGL *functions,
caps->maxTextureBufferSize = QuerySingleGLInt(functions, GL_MAX_TEXTURE_BUFFER_SIZE);
caps->textureBufferOffsetAlignment =
QuerySingleGLInt(functions, GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT);
extensions->textureBufferOES = true;
extensions->textureBufferEXT = true;
}
else
{
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -1427,6 +1427,9 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch)
ASSERT_EQ(0x000003bdu, ImmutableString("imageSize(01a").mangledNameHash());
ASSERT_EQ(0x000005f2u, ImmutableString("imageSize(01b").mangledNameHash());
ASSERT_EQ(0x000003bbu, ImmutableString("imageSize(01c").mangledNameHash());
ASSERT_EQ(0x000005fcu, ImmutableString("imageSize(01g").mangledNameHash());
ASSERT_EQ(0x000003b6u, ImmutableString("imageSize(01h").mangledNameHash());
ASSERT_EQ(0x000003b7u, ImmutableString("imageSize(01i").mangledNameHash());
ASSERT_EQ(0x000003a1u, ImmutableString("imageSize(01L").mangledNameHash());
ASSERT_EQ(0x000003a2u, ImmutableString("imageSize(01M").mangledNameHash());
ASSERT_EQ(0x00000560u, ImmutableString("imageSize(01N").mangledNameHash());
......@@ -1436,9 +1439,6 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch)
ASSERT_EQ(0x000005b1u, ImmutableString("imageSize(01O").mangledNameHash());
ASSERT_EQ(0x000003b0u, ImmutableString("imageSize(01P").mangledNameHash());
ASSERT_EQ(0x000003b1u, ImmutableString("imageSize(01Q").mangledNameHash());
ASSERT_EQ(0x000005fcu, ImmutableString("imageSize(01g").mangledNameHash());
ASSERT_EQ(0x000003b6u, ImmutableString("imageSize(01h").mangledNameHash());
ASSERT_EQ(0x000003b7u, ImmutableString("imageSize(01i").mangledNameHash());
ASSERT_EQ(0x000003aeu, ImmutableString("imageSize(01R").mangledNameHash());
ASSERT_EQ(0x000003afu, ImmutableString("imageSize(01S").mangledNameHash());
ASSERT_EQ(0x000003b4u, ImmutableString("imageSize(01T").mangledNameHash());
......
......@@ -109,6 +109,7 @@
1442 OPENGL : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.* = FAIL
1442 OPENGL : dEQP-GLES31.functional.program_interface_query.uniform.random.* = FAIL
1442 OPENGL : dEQP-GLES31.functional.program_interface_query.uniform_block.referenced_by.* = FAIL
4933 OPENGL : dEQP-GLES31.functional.texture.texture_buffer.render_modify.as_fragment_texture.mapbuffer_* = FAIL
// Slow / timeout on Linux GL
5197 LINUX OPENGL : dEQP-GLES31.functional.compute.indirect_dispatch.gen_in_compute.large_offset = TIMEOUT
......
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