You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-23 15:16:17 +00:00
Disabled array initialization, const array and arr.length in shaders
This commit is contained in:
@@ -522,9 +522,6 @@ String ShaderCompilerGLES2::_dump_node_code(SL::Node *p_node, int p_level, Gener
|
|||||||
SL::ArrayDeclarationNode *arr_dec_node = (SL::ArrayDeclarationNode *)p_node;
|
SL::ArrayDeclarationNode *arr_dec_node = (SL::ArrayDeclarationNode *)p_node;
|
||||||
|
|
||||||
StringBuffer<> declaration;
|
StringBuffer<> declaration;
|
||||||
if (arr_dec_node->is_const) {
|
|
||||||
declaration += "const ";
|
|
||||||
}
|
|
||||||
declaration += _prestr(arr_dec_node->precision);
|
declaration += _prestr(arr_dec_node->precision);
|
||||||
declaration += _typestr(arr_dec_node->datatype);
|
declaration += _typestr(arr_dec_node->datatype);
|
||||||
|
|
||||||
@@ -540,22 +537,6 @@ String ShaderCompilerGLES2::_dump_node_code(SL::Node *p_node, int p_level, Gener
|
|||||||
declaration += "[";
|
declaration += "[";
|
||||||
declaration += itos(arr_dec_node->declarations[i].size);
|
declaration += itos(arr_dec_node->declarations[i].size);
|
||||||
declaration += "]";
|
declaration += "]";
|
||||||
int sz = arr_dec_node->declarations[i].initializer.size();
|
|
||||||
if (sz > 0) {
|
|
||||||
declaration += "=";
|
|
||||||
declaration += _typestr(arr_dec_node->datatype);
|
|
||||||
declaration += "[";
|
|
||||||
declaration += itos(sz);
|
|
||||||
declaration += "]";
|
|
||||||
declaration += "(";
|
|
||||||
for (int j = 0; j < sz; j++) {
|
|
||||||
declaration += _dump_node_code(arr_dec_node->declarations[i].initializer[j], p_level, r_gen_code, p_actions, p_default_actions, p_assigning);
|
|
||||||
if (j != sz - 1) {
|
|
||||||
declaration += ", ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
declaration += ")";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
code += declaration.as_string();
|
code += declaration.as_string();
|
||||||
|
|||||||
@@ -2060,7 +2060,7 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = {
|
|||||||
//sub-functions
|
//sub-functions
|
||||||
|
|
||||||
//array
|
//array
|
||||||
{ "length", TYPE_INT, { TYPE_VOID }, TAG_ARRAY, false },
|
{ "length", TYPE_INT, { TYPE_VOID }, TAG_ARRAY, true },
|
||||||
|
|
||||||
{ NULL, TYPE_VOID, { TYPE_VOID }, TAG_GLOBAL, false }
|
{ NULL, TYPE_VOID, { TYPE_VOID }, TAG_GLOBAL, false }
|
||||||
|
|
||||||
@@ -3888,6 +3888,11 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const Map<StringName, Bui
|
|||||||
if (tk.type == TK_BRACKET_OPEN) {
|
if (tk.type == TK_BRACKET_OPEN) {
|
||||||
bool unknown_size = false;
|
bool unknown_size = false;
|
||||||
|
|
||||||
|
if (VisualServer::get_singleton()->is_low_end() && is_const) {
|
||||||
|
_set_error("Local const arrays are supported only on high-end platform!");
|
||||||
|
return ERR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
ArrayDeclarationNode *node = alloc_node<ArrayDeclarationNode>();
|
ArrayDeclarationNode *node = alloc_node<ArrayDeclarationNode>();
|
||||||
node->datatype = type;
|
node->datatype = type;
|
||||||
node->precision = precision;
|
node->precision = precision;
|
||||||
@@ -3923,6 +3928,12 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const Map<StringName, Bui
|
|||||||
|
|
||||||
tk = _get_token();
|
tk = _get_token();
|
||||||
if (tk.type == TK_OP_ASSIGN) {
|
if (tk.type == TK_OP_ASSIGN) {
|
||||||
|
|
||||||
|
if (VisualServer::get_singleton()->is_low_end()) {
|
||||||
|
_set_error("Array initialization is supported only on high-end platform!");
|
||||||
|
return ERR_PARSE_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
tk = _get_token();
|
tk = _get_token();
|
||||||
|
|
||||||
if (tk.type != TK_CURLY_BRACKET_OPEN) {
|
if (tk.type != TK_CURLY_BRACKET_OPEN) {
|
||||||
|
|||||||
Reference in New Issue
Block a user