Merge branch 'dev' of git.nbross.com:nielsbross/Shader-Compiler into dev

This commit is contained in:
2024-07-02 22:52:06 +02:00
5 changed files with 111 additions and 22 deletions

View File

@@ -77,7 +77,7 @@ Type_Variable :: struct {
child_count : int;
//@Note(niels): For constant buffers
buffer_index : u32;
resource_index : u32;
uf_parent : Type_Variable_Handle;
@@ -198,6 +198,10 @@ Semantic_Checker :: struct {
// type_variables : [..]Type_Variable;
constraints : [..]Type_Constraint;
current_buffer_index : u32 = 0;
current_sampler_index : u32 = 0;
current_texture_index : u32 = 0;
result : Semantic_Check_Result;
}
@@ -926,8 +930,6 @@ declare_struct :: (checker : *Semantic_Checker, node : *AST_Node) -> Type_Variab
return declare_struct(checker, node, node.name);
}
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;
@@ -938,8 +940,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 = current_buffer_index;
current_buffer_index += 1;
var.resource_index = checker.current_buffer_index;
checker.current_buffer_index += 1;
return type_var;
}
@@ -947,8 +949,8 @@ declare_cbuffer :: (checker : *Semantic_Checker, node : *AST_Node) -> Type_Varia
type_var := declare_struct(checker, node);
var := h2tv(checker, type_var);
var.type = .CBuffer;
var.buffer_index = current_buffer_index;
current_buffer_index += 1;
var.resource_index = checker.current_buffer_index;
checker.current_buffer_index += 1;
array_add(*checker.result.constant_buffers, type_var);
return type_var;
}
@@ -1252,6 +1254,17 @@ create_field :: (checker : *Semantic_Checker, node : *AST_Node) -> Type_Variable
variable.name = node.name;
typename : string;
variable.type = get_type_from_identifier(checker, checker.current_scope, node, *typename);
if variable.kind == .Declaration && variable.type == .Sampler {
variable.resource_index = checker.current_sampler_index;
checker.current_sampler_index += 1;
}
if variable.kind == .Declaration && variable.type == .Texture2D {
variable.resource_index = checker.current_texture_index;
checker.current_texture_index += 1;
}
variable.typename = typename;
variable.source_node = node;
variable.scope = checker.current_scope;
@@ -1761,7 +1774,9 @@ type_check :: (checker : *Semantic_Checker, root : *AST_Node) {
}
check :: (checker : *Semantic_Checker, root : *AST_Node) -> Semantic_Check_Result {
current_buffer_index = 0;
checker.current_buffer_index = 0;
checker.current_sampler_index = 0;
checker.current_texture_index = 0;
array_reserve(*checker.result.messages, 16);
array_reserve(*checker.constraints, 1024);
add_hlsl_builtins(checker);
@@ -2037,6 +2052,7 @@ print_type_variable :: (builder : *String_Builder, variable : Type_Variable, che
}
case .Function; #through;
case .Struct; #through;
case .CBuffer; #through;
case .Field; {
if variable.struct_field_parent {
print_to_builder(builder, "%.", variable.struct_field_parent.name);