Skip to content

Commit

Permalink
[SPIR-V] Write more fragment code
Browse files Browse the repository at this point in the history
  • Loading branch information
RobDangerous committed Nov 16, 2023
1 parent dc7d6ad commit eacb0a6
Showing 1 changed file with 50 additions and 0 deletions.
50 changes: 50 additions & 0 deletions Sources/backends/spirv.c
Original file line number Diff line number Diff line change
Expand Up @@ -955,6 +955,56 @@ static void spirv_export_fragment(char *directory, function *main) {
write_instruction_schema(&instructions);

write_capabilities(&instructions);
write_op_ext_inst_import(&decorations, "GLSL.std.450");
write_op_memory_model(&decorations, ADDRESSING_MODEL_LOGICAL, MEMORY_MODEL_GLSL450);
uint32_t entry_point = allocate_index();
output_var = allocate_index();
input_var = allocate_index();
uint32_t interfaces[] = {output_var, input_var};
write_op_entry_point(&decorations, EXECUTION_MODEL_FRAGMENT, entry_point, "main", interfaces, sizeof(interfaces) / 4);

uint32_t output_struct = allocate_index();
write_vertex_output_decorations(&decorations, output_struct);

uint32_t inputs[256];
inputs[0] = allocate_index();
write_vertex_input_decorations(&decorations, inputs, 1);

// write_base_types(&constants, vertex_input);

write_op_variable_with_result(&instructions, output_struct_pointer_type, output_var, STORAGE_CLASS_OUTPUT);

type *input = get_type(pixel_input);

for (size_t i = 0; i < input->members.size; ++i) {
member m = input->members.m[i];
if (m.type.type == float2_id) {
write_op_variable_with_result(&instructions, spirv_float2_type, input_var, STORAGE_CLASS_INPUT);
}
else if (m.type.type == float3_id) {
write_op_variable_with_result(&instructions, spirv_float3_type, input_var, STORAGE_CLASS_INPUT);
}
else if (m.type.type == float4_id) {
write_op_variable_with_result(&instructions, spirv_float4_type, input_var, STORAGE_CLASS_INPUT);
}
else {
debug_context context = {0};
error(context, "Type unsupported for input in SPIR-V");
}
}

// write_functions(&instructions, main, SHADER_STAGE_VERTEX, vertex_input, input_var, vertex_output, output_var);

write_types(&constants);

// header
write_magic_number(&header);
write_version_number(&header);
write_generator_magic_number(&header);
write_bound(&header);
write_instruction_schema(&header);

write_constants(&constants);

char *name = get_name(main->name);

Expand Down

0 comments on commit eacb0a6

Please sign in to comment.