Revision 5900f32fff9970b4221ce7fb7e94133e387ff9de authored by Tim Foley on 31 August 2017, 19:47:39 UTC, committed by Tim Foley on 06 September 2017, 20:52:04 UTC
This gets us far enough that we can convert a single test case to use the IR, under the new `-use-ir` flag.
Getting this merged into mainline will at least ensure that we keep the IR path working in a minimal fashion, even when we have to add functionality the existing AST-based path

There is definitely some clutter here from keeping both IR-based and AST-based translation around, but I don't want to have a long-lived branch for the IR that gets further and further away from the `master` branch that is actually getting used and tested.

Summary of changes:

- Add pointer types and basic `load` operation to be able to handle variable declarations

- Add basic `call` instruction type

- Add simple address math for field reference in l-value

- Always add IR for referenced decls to global scope

- Add notion of "intrinsic" type modifier, which maps a type declaration directly to an IR opcode (plus optional literal operands to handle things like texture/sampler flavor)

- Improve printing of IR instructions, types, operands

- Add constant-buffer type to IR

- Allow any instruction to be detected as "should be folded into use sites" and use this to tag things of constant-buffer type

- Also add logic for implicit base on member expressions, to handle references to `cbuffer` members

- Add connection back to original decl to IR variables (including global shader parameters...)

- Use reflection name instead of true name when emitting HLSL from IR (so that we can match HLSL output)

- Make IR include decorations for type layout

- Re-use existing emit logic for HLSL semantics to output `register` semantics for IR-based code

- Make IR-based codegen be an option we can enable from the command line
  - It still isn't on by default (it can barely manage a trivial shader), but it seems better to enable it always instead of putting it under an `#ifdef`

- Fix up how we check for intrinsic operations suring AST-based cross compilation so that adding new intrinsic ops for the IR won't break codegen.
1 parent e59a1b3
History
File Mode Size
build
docs
examples
external
source
tests
tools
.gitignore -rw-r--r-- 385 bytes
.gitmodules -rw-r--r-- 107 bytes
CODE_OF_CONDUCT.md -rw-r--r-- 3.1 KB
LICENSE -rw-r--r-- 1.1 KB
README.md -rw-r--r-- 6.1 KB
appveyor.yml -rw-r--r-- 3.5 KB
slang.h -rw-r--r-- 31.9 KB
slang.sln -rw-r--r-- 6.4 KB
test.bat -rw-r--r-- 1.4 KB

README.md

back to top