Fix static array. Add constant buffers. Beginning of textures.

This commit is contained in:
2024-06-26 13:42:13 +02:00
parent 3bbbc1d556
commit 1bf829d42f
8 changed files with 217 additions and 59 deletions

View File

@@ -6,7 +6,7 @@
//~ nbr: Error reporting TODOs
//
// [x] Improve error reporting on mismatched overloads when types don't match, but arity does
// [ ] Improve error reporting for type mismatches in general. It seems like the expect node is no always correct.
// [x] Improve error reporting for type mismatches in general. It seems like the expect node is not always correct.
#load "static_array.jai";
#import "Hash_Table";
@@ -920,9 +920,7 @@ declare_struct :: (checker : *Semantic_Checker, node : *AST_Node) -> Type_Variab
return declare_struct(checker, node, node.name);
}
PROPERTIES_BUFFER_INDEX : u32 : 0;
META_BUFFER_INDEX : u32 : PROPERTIES_BUFFER_INDEX + 1;
current_custom_buffer_index : u32 = META_BUFFER_INDEX + 1;
current_buffer_index : u32 = 0;
declare_properties :: (checker : *Semantic_Checker, node : *AST_Node) -> Type_Variable_Handle {
name := ifx node.name.count == 0 then "properties" else node.name;
@@ -930,7 +928,8 @@ declare_properties :: (checker : *Semantic_Checker, node : *AST_Node) -> Type_Va
var := h2tv(checker, type_var);
var.type = .Properties;
var.typename = "properties";
var.buffer_index = PROPERTIES_BUFFER_INDEX;
var.buffer_index = current_buffer_index;
current_buffer_index += 1;
return type_var;
}
@@ -938,21 +937,12 @@ declare_cbuffer :: (checker : *Semantic_Checker, node : *AST_Node) -> Type_Varia
type_var := declare_struct(checker, node);
var := h2tv(checker, type_var);
var.type = .CBuffer;
current_custom_buffer_index += 1;
var.buffer_index = current_custom_buffer_index;
var.buffer_index = current_buffer_index;
current_buffer_index += 1;
array_add(*checker.result.constant_buffers, type_var);
return type_var;
}
declare_meta :: (checker : *Semantic_Checker, node : *AST_Node) -> Type_Variable_Handle {
name := ifx node.name.count == 0 then "meta" else node.name;
type_var := declare_struct(checker, node, name);
var := h2tv(checker, type_var);
var.typename = name;
var.buffer_index = META_BUFFER_INDEX;
return type_var;
}
get_actual_function_name :: (node : *AST_Node) -> string {
name_to_check := node.name;
if node.vertex_entry_point {
@@ -1501,8 +1491,6 @@ traverse :: (checker : *Semantic_Checker, root : *AST_Node) {
declare_properties(checker, declaration);
} else if declaration.kind == .Struct {
declare_struct(checker, declaration);
} else if declaration.kind == .Meta {
declare_meta(checker, declaration);
} else if declaration.kind == .CBuffer {
declare_cbuffer(checker, declaration);
}
@@ -1729,6 +1717,7 @@ type_check :: (checker : *Semantic_Checker, root : *AST_Node) {
}
check :: (checker : *Semantic_Checker, root : *AST_Node) -> Semantic_Check_Result {
current_buffer_index = 0;
array_reserve(*checker.result.messages, 16);
array_reserve(*checker.constraints, 1024);
add_hlsl_builtins(checker);
@@ -1745,18 +1734,6 @@ check :: (checker : *Semantic_Checker) -> Semantic_Check_Result {
// ===========================================================
// Pretty printing
pretty_print_children :: (checker : *Semantic_Checker, builder : *String_Builder, type : Type_Variable, indentation : int) {
indent(builder, indentation);
for 0..type.child_count - 1 {
child_handle := type.children[it];
child := h2tv(checker, child_handle);
// if child.kind != .Function {
// print_to_builder(builder, "% : %", child.name, type_to_string(child));
// } else {
// pretty_print_function(checker, builder, "", child, 0);
// }
}
}
type_to_string :: (type_variable : Type_Variable) -> string {
if type_variable.type == {
@@ -1842,7 +1819,6 @@ pretty_print_struct :: (checker : *Semantic_Checker, builder : *String_Builder,
}
}
pretty_print_children(checker, builder, struct_type, 0);
append(builder, "}\n");
}