|
@@ -315,6 +315,7 @@ const ShaderLanguage::KeyWord ShaderLanguage::keyword_list[] = {
|
|
|
{ TK_TYPE_USAMPLER3D, "usampler3D", KCF_SAMPLER_DATATYPE, {}, {} },
|
|
|
{ TK_TYPE_SAMPLERCUBE, "samplerCube", KCF_SAMPLER_DATATYPE, {}, {} },
|
|
|
{ TK_TYPE_SAMPLERCUBEARRAY, "samplerCubeArray", KCF_SAMPLER_DATATYPE, {}, {} },
|
|
|
+ { TK_TYPE_SAMPLEREXT, "samplerExternalOES", KCF_SAMPLER_DATATYPE, {}, {} },
|
|
|
|
|
|
// interpolation qualifiers
|
|
|
|
|
@@ -1027,7 +1028,8 @@ bool ShaderLanguage::is_token_datatype(TokenType p_type) {
|
|
|
p_type == TK_TYPE_ISAMPLER3D ||
|
|
|
p_type == TK_TYPE_USAMPLER3D ||
|
|
|
p_type == TK_TYPE_SAMPLERCUBE ||
|
|
|
- p_type == TK_TYPE_SAMPLERCUBEARRAY);
|
|
|
+ p_type == TK_TYPE_SAMPLERCUBEARRAY ||
|
|
|
+ p_type == TK_TYPE_SAMPLEREXT);
|
|
|
}
|
|
|
|
|
|
ShaderLanguage::DataType ShaderLanguage::get_token_datatype(TokenType p_type) {
|
|
@@ -1162,6 +1164,8 @@ String ShaderLanguage::get_datatype_name(DataType p_type) {
|
|
|
return "samplerCube";
|
|
|
case TYPE_SAMPLERCUBEARRAY:
|
|
|
return "samplerCubeArray";
|
|
|
+ case TYPE_SAMPLEREXT:
|
|
|
+ return "samplerExternalOES";
|
|
|
case TYPE_STRUCT:
|
|
|
return "struct";
|
|
|
case TYPE_MAX:
|
|
@@ -3169,6 +3173,8 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = {
|
|
|
{ "texture", TYPE_VEC4, { TYPE_SAMPLERCUBE, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false },
|
|
|
{ "texture", TYPE_VEC4, { TYPE_SAMPLERCUBEARRAY, TYPE_VEC4, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false },
|
|
|
{ "texture", TYPE_VEC4, { TYPE_SAMPLERCUBEARRAY, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false },
|
|
|
+ { "texture", TYPE_VEC4, { TYPE_SAMPLEREXT, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false },
|
|
|
+ { "texture", TYPE_VEC4, { TYPE_SAMPLEREXT, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false },
|
|
|
|
|
|
// textureProj
|
|
|
|
|
@@ -4482,7 +4488,8 @@ Variant ShaderLanguage::constant_value_to_variant(const Vector<Scalar> &p_value,
|
|
|
case ShaderLanguage::TYPE_USAMPLER2D:
|
|
|
case ShaderLanguage::TYPE_USAMPLER3D:
|
|
|
case ShaderLanguage::TYPE_SAMPLERCUBE:
|
|
|
- case ShaderLanguage::TYPE_SAMPLERCUBEARRAY: {
|
|
|
+ case ShaderLanguage::TYPE_SAMPLERCUBEARRAY:
|
|
|
+ case ShaderLanguage::TYPE_SAMPLEREXT: {
|
|
|
// Texture types, likely not relevant here.
|
|
|
break;
|
|
|
}
|
|
@@ -4707,6 +4714,17 @@ PropertyInfo ShaderLanguage::uniform_to_property_info(const ShaderNode::Uniform
|
|
|
pi.hint_string = "Texture3D";
|
|
|
}
|
|
|
} break;
|
|
|
+ case ShaderLanguage::TYPE_SAMPLEREXT: {
|
|
|
+ if (p_uniform.array_size > 0) {
|
|
|
+ pi.type = Variant::ARRAY;
|
|
|
+ pi.hint = PROPERTY_HINT_ARRAY_TYPE;
|
|
|
+ pi.hint_string = MAKE_RESOURCE_TYPE_HINT("ExternalTexture");
|
|
|
+ } else {
|
|
|
+ pi.type = Variant::OBJECT;
|
|
|
+ pi.hint = PROPERTY_HINT_RESOURCE_TYPE;
|
|
|
+ pi.hint_string = "ExternalTexture";
|
|
|
+ }
|
|
|
+ } break;
|
|
|
case ShaderLanguage::TYPE_STRUCT: {
|
|
|
// FIXME: Implement this.
|
|
|
} break;
|
|
@@ -4780,6 +4798,8 @@ uint32_t ShaderLanguage::get_datatype_size(ShaderLanguage::DataType p_type) {
|
|
|
return 16;
|
|
|
case TYPE_SAMPLERCUBEARRAY:
|
|
|
return 16;
|
|
|
+ case TYPE_SAMPLEREXT:
|
|
|
+ return 16;
|
|
|
case TYPE_STRUCT:
|
|
|
return 0;
|
|
|
case TYPE_MAX: {
|
|
@@ -4921,6 +4941,7 @@ ShaderLanguage::DataType ShaderLanguage::get_scalar_type(DataType p_type) {
|
|
|
TYPE_UINT,
|
|
|
TYPE_FLOAT,
|
|
|
TYPE_FLOAT,
|
|
|
+ TYPE_FLOAT,
|
|
|
TYPE_VOID,
|
|
|
};
|
|
|
|
|
@@ -4963,6 +4984,7 @@ int ShaderLanguage::get_cardinality(DataType p_type) {
|
|
|
1,
|
|
|
1,
|
|
|
1,
|
|
|
+ 1,
|
|
|
};
|
|
|
|
|
|
static_assert(sizeof(cardinality_table) / sizeof(*cardinality_table) == TYPE_MAX);
|