Finalize struct gen for structured buffers. Rename buffer builtins.
This commit is contained in:
@@ -1094,16 +1094,16 @@ declare_buffer :: (checker : *Checker, node : *AST_Node) -> Type_Variable_Handle
|
||||
return 0;
|
||||
}
|
||||
|
||||
buffer_struct_name := sprint("%_buffer_substruct___%", random_get(), node.name);
|
||||
buffer_struct_name := sprint("__buffer_substruct__%_%", random_get(), node.name);
|
||||
|
||||
variable.element_type = declare_struct(checker, node, buffer_struct_name); // Won't work entirely like this. At least we're going to need some access changes
|
||||
variable.resource_index = checker.current_buffer_index;
|
||||
variable.element_type = declare_struct(checker, node, buffer_struct_name);
|
||||
variable.resource_index = checker.current_texture_index;
|
||||
element := from_handle(checker, variable.element_type);
|
||||
scope := get_scope(checker, element.scope);
|
||||
scope.builtin = true;
|
||||
variable.scope = element.scope;
|
||||
|
||||
checker.current_buffer_index += 1;
|
||||
checker.current_texture_index += 1;
|
||||
|
||||
node.type_variable = handle;
|
||||
|
||||
|
||||
13
Codegen.jai
13
Codegen.jai
@@ -526,8 +526,13 @@ emit_field_list :: (state : *Codegen_State, field_list : *AST_Node, indentation
|
||||
}
|
||||
}
|
||||
|
||||
emit_struct :: (state : *Codegen_State, node : *AST_Node, indentation : int) {
|
||||
print_to_builder(*state.builder, "struct %", node.name);
|
||||
emit_struct :: (state : *Codegen_State, node : *AST_Node, indentation : int, name : string = "") {
|
||||
if name.count > 0 {
|
||||
print_to_builder(*state.builder, "struct %", name);
|
||||
} else {
|
||||
print_to_builder(*state.builder, "struct %", node.name);
|
||||
}
|
||||
|
||||
|
||||
current_scope := state.current_scope;
|
||||
state.current_scope = from_handle(state.ctx.type_variables, node.type_variable).scope;
|
||||
@@ -571,10 +576,10 @@ emit_buffer :: (state : *Codegen_State, node : *AST_Node, indentation : int) {
|
||||
variable := from_handle(state.ctx.type_variables, node.type_variable);
|
||||
element := from_handle(state.ctx.type_variables, variable.element_type);
|
||||
|
||||
emit_struct(state, node, indentation);
|
||||
emit_struct(state, node, indentation, element.typename);
|
||||
// print_to_builder(*state.builder, "struct %\n", element.name);
|
||||
|
||||
print_to_builder(*state.builder, "StructuredBuffer<%> %;\n\n", element.typename, variable.name);
|
||||
print_to_builder(*state.builder, "StructuredBuffer<%> % : register(t%);\n\n", element.typename, variable.name, variable.resource_index);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -217,11 +217,11 @@ identifier_kind :: (using lexer : *Lexer) -> Token_Kind {
|
||||
identifier.count = length;
|
||||
|
||||
if identifier == "bool" return .TOKEN_BOOL;
|
||||
if identifier == "buffer" return .TOKEN_BUFFER;
|
||||
if identifier == "Buffer" return .TOKEN_BUFFER;
|
||||
if identifier == "case" return .TOKEN_CASE;
|
||||
if identifier == "columnmajor" return .TOKEN_COLUMNMAJOR;
|
||||
if identifier == "const" return .TOKEN_CONST;
|
||||
if identifier == "constant_buffer" return .TOKEN_CONSTANT_BUFFER;
|
||||
if identifier == "Constant_Buffer" return .TOKEN_CONSTANT_BUFFER;
|
||||
if identifier == "continue" return .TOKEN_CONTINUE;
|
||||
if identifier == "default" return .TOKEN_DEFAULT;
|
||||
if identifier == "directive" return .TOKEN_DIRECTIVE;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
properties :: constant_buffer @properties {
|
||||
properties :: Constant_Buffer @properties {
|
||||
color : float4;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
property_buffer :: buffer {
|
||||
property_buffer :: Buffer {
|
||||
color : float4;
|
||||
}
|
||||
|
||||
const_buffer :: constant_buffer {
|
||||
const_buffer :: Constant_Buffer {
|
||||
color : float4;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
camera :: constant_buffer {
|
||||
camera :: Constant_Buffer {
|
||||
projection : float4x4;
|
||||
view : float4x4;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
p :: constant_buffer {
|
||||
p :: Constant_Buffer {
|
||||
v : float2;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
p :: constant_buffer @properties {
|
||||
p :: Constant_Buffer @properties {
|
||||
color : float4;
|
||||
rect_position : float2;
|
||||
rect_scale : float2;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{kind = TOKEN_IDENTIFIER; ; index = 0 ; length = 10 line = 1 ; column = 0 ; value ='properties'; }
|
||||
{kind = TOKEN_DOUBLECOLON; ; index = 11 ; length = 2 line = 1 ; column = 11 ; value ='::'; }
|
||||
{kind = TOKEN_CONSTANT_BUFFER; ; index = 14 ; length = 15 line = 1 ; column = 14 ; value ='constant_buffer'; }
|
||||
{kind = TOKEN_CONSTANT_BUFFER; ; index = 14 ; length = 15 line = 1 ; column = 14 ; value ='Constant_Buffer'; }
|
||||
{kind = TOKEN_AT; ; index = 30 ; length = 1 line = 1 ; column = 30 ; value ='@'; }
|
||||
{kind = TOKEN_IDENTIFIER; ; index = 31 ; length = 10 line = 1 ; column = 31 ; value ='properties'; }
|
||||
{kind = TOKEN_LEFTBRACE; ; index = 42 ; length = 1 line = 1 ; column = 42 ; value ='{'; }
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{kind = TOKEN_IDENTIFIER; ; index = 0 ; length = 6 line = 1 ; column = 0 ; value ='camera'; }
|
||||
{kind = TOKEN_DOUBLECOLON; ; index = 7 ; length = 2 line = 1 ; column = 7 ; value ='::'; }
|
||||
{kind = TOKEN_CONSTANT_BUFFER; ; index = 10 ; length = 15 line = 1 ; column = 10 ; value ='constant_buffer'; }
|
||||
{kind = TOKEN_CONSTANT_BUFFER; ; index = 10 ; length = 15 line = 1 ; column = 10 ; value ='Constant_Buffer'; }
|
||||
{kind = TOKEN_LEFTBRACE; ; index = 26 ; length = 1 line = 1 ; column = 26 ; value ='{'; }
|
||||
{kind = TOKEN_IDENTIFIER; ; index = 30 ; length = 10 line = 2 ; column = 0 ; value ='projection'; }
|
||||
{kind = TOKEN_COLON; ; index = 41 ; length = 1 line = 2 ; column = 11 ; value =':'; }
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{kind = TOKEN_IDENTIFIER; ; index = 0 ; length = 1 line = 1 ; column = 0 ; value ='p'; }
|
||||
{kind = TOKEN_DOUBLECOLON; ; index = 2 ; length = 2 line = 1 ; column = 2 ; value ='::'; }
|
||||
{kind = TOKEN_CONSTANT_BUFFER; ; index = 5 ; length = 15 line = 1 ; column = 5 ; value ='constant_buffer'; }
|
||||
{kind = TOKEN_IDENTIFIER; ; index = 5 ; length = 15 line = 1 ; column = 5 ; value ='constant_buffer'; }
|
||||
{kind = TOKEN_LEFTBRACE; ; index = 21 ; length = 1 line = 1 ; column = 21 ; value ='{'; }
|
||||
{kind = TOKEN_IDENTIFIER; ; index = 25 ; length = 1 line = 2 ; column = 0 ; value ='v'; }
|
||||
{kind = TOKEN_COLON; ; index = 27 ; length = 1 line = 2 ; column = 2 ; value =':'; }
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{kind = TOKEN_IDENTIFIER; ; index = 0 ; length = 1 line = 1 ; column = 0 ; value ='p'; }
|
||||
{kind = TOKEN_DOUBLECOLON; ; index = 2 ; length = 2 line = 1 ; column = 2 ; value ='::'; }
|
||||
{kind = TOKEN_CONSTANT_BUFFER; ; index = 5 ; length = 15 line = 1 ; column = 5 ; value ='constant_buffer'; }
|
||||
{kind = TOKEN_IDENTIFIER; ; index = 5 ; length = 15 line = 1 ; column = 5 ; value ='constant_buffer'; }
|
||||
{kind = TOKEN_AT; ; index = 21 ; length = 1 line = 1 ; column = 21 ; value ='@'; }
|
||||
{kind = TOKEN_IDENTIFIER; ; index = 22 ; length = 10 line = 1 ; column = 22 ; value ='properties'; }
|
||||
{kind = TOKEN_LEFTBRACE; ; index = 33 ; length = 1 line = 1 ; column = 33 ; value ='{'; }
|
||||
|
||||
Reference in New Issue
Block a user