-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgenerate_shader_structs_cpp.ps1
More file actions
119 lines (100 loc) · 3.28 KB
/
generate_shader_structs_cpp.ps1
File metadata and controls
119 lines (100 loc) · 3.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
Set-StrictMode -Version 3.0
$Lookup = Import-Csv ".\shader_struct_types.txt"
$LookuphashTable = @{}
$Lookup | Foreach-Object {$LookuphashTable[$_.hlsl] = $_.cpp}
function Replace-From-Table
{
param([hashtable] $table, [string] $target)
Foreach($k in $table.Keys)
{
$target = $target -replace "$k ", "$($LookuphashTable[$k]) "
}
return $target
}
function generate-structs-hlsl
{
$contents = Get-content "./Shaders\structs.hlsl" -Raw
# Replace general file contents
$contents = Replace-From-Table $LookuphashTable $contents
# Write-Host $contents
$structNameRegex = "(?<=struct)\s+(\S*)\s*(?={)"
# Write-Host ".."
$structnames = (Select-String -InputObject $contents -Pattern $structNameRegex -AllMatches).Matches
Foreach($s in $structnames)
{
$sname = $s.ToString().trim()
$contents = $contents -replace $("(?-i)$sname"), "GPU_$sname"
}
# Write-Host $contents
$constFloatSemicolonRegex = "(?<=static constexpr float.*=.*\d*.*)(?<!\s*f\s*)(;)"
$floatSeicolonMatches = (Select-String -InputObject $contents -Pattern $constFloatSemicolonRegex -AllMatches) |Select-Object -ExpandProperty Matches
Write-Host $($floatSeicolonMatches.length)
$indexOffset = 0 #As we add insertions first to last, we have to bump the index
$insertString = "f"
Foreach($m in $floatSeicolonMatches)
{
Write-Host ($m.groups[0].index) -foregroundColor Green
$index = $m.groups[0].index
$contents = $contents.Insert($index + $indexOffset, $insertString)
$indexOffset += $insertString.Length
}
$output = "//GENERATED FILE`n//EDIT structs.hlsl TO UPDATE`n#pragma once"+ "`n"+'#include <Renderer/VulkanIncludes/forward-declarations-renderer.h>'+"`n"+ '#include <General/GLM_IMPL.h>'+ "`n"
$output += $contents
# Write-Host $output
$output | Out-File Code/Renderer/VulkanIncludes/structs_hlsl.h -Encoding ascii
}
# function process-binding-line
# {
# param([string] $line)
# $result = ""
# $oneBindingRegex = "(?<=binding\()(\d+)\s*(?=\))"
# $twoBindingRegex = "(?<=binding\()(\d+),\s*(\d+)"
# if ($line -like "*push_constant*")
# {
# $result = "pushconstant"
# return $result
# }
# else
# {
# $search = (Select-String -InputObject $line -Pattern $twoBindingRegex)
# if ($search)
# {
# $result = "$($search.Matches)"
# return $result
# }
# $search = (Select-String -InputObject $line -Pattern $oneBindingRegex)
# if ($search)
# {
# $result = "$($search.Matches), 0"
# return $result
# }
# Write-Host "search failed"
# }
# }
# function generate-LayoutInfo
# {
# $items = Get-ChildItem -Path "./Shaders/*" -Filter **.hlsl
# $items |Foreach-Object{Write-Host $_}
# $items |Foreach-Object{
# $shaderfile = $_
# $bindings = @()
# $reading = $false
# foreach ($line in Get-Content -Path $shaderfile) {
# if ($reading)
# {
# #ingest every char until we find ';'
# #Then split the line to get arg type and name
# }
# else
# {
# if ($line -like '`[`[**`]`]')
# {
# $reading = #true;
# $bindings += process-binding-line($line)
# }
# }
# }
# }
# }
generate-structs-hlsl
# generate-LayoutInfo