Fixes for texture and sampler codegen

- Moved textures and samplers out of property cbuffer for hlsl
- Fixed register indices for resources
This commit is contained in:
2024-07-01 07:58:13 +02:00
parent 274cb379b4
commit 92c1f593c2
3 changed files with 66 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;
@@ -196,6 +196,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;
}
@@ -924,16 +928,14 @@ 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;
type_var := declare_struct(checker, node, name);
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;
}
@@ -941,8 +943,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;
}
@@ -1246,6 +1248,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;
@@ -1728,7 +1741,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);