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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user