Comments (2)
The copy is actually correct by the semantic meaning of the code.
In Slang, if you call a function that takes a struct as parameter, it semantically means the argument is passed by value (copying the value in), and it is expected that the compiler optimization will take place to remove unnecessary copies.
General support of passing by reference is unfortunately not possible in many platforms. For example, HLSL and GLSL does not have a notion of pointers, and pointers is only valid in SPIRV with restrictions.
This code when compiled with DXC is producing similar results with -O0
.
It is possible for us to do a better job when targeting SPIRV, but it is not clear to me that will result in more performant code after optimization, since the optimization passes are designed to be good at removing this kind of copies.
from slang.
I am closing this issue for now, since there is not much we can do in the short term. We cannot generate code that makes pervasive use of pointers in parameter passing given the restrictions of many targets just yet.
from slang.
Related Issues (20)
- Compilation Warnings Related to Uninitialized Struct Fields
- Matrix layout modifiers ignored HOT 1
- Resource variables used in a global initializer function do not hoist correctly
- Error not propagated from failed DXC compile
- `tests\autodiff\reverse-while-loop-3.slang` has incorrect results
- `kIROp_MakeStruct` differentiates when it should not be differentiating
- Uninitialized variable check will infinitely loop if pointer to a specialized IR object is used
- `DifferentialType` `ownedScope` does not track an associated `ContainerDecl`
- Problem with exported matrices in DxcLinker
- Support generic type constraints that are dependent on another generic type parameter.
- Initial precompiled SPIR-V support (-embed-spirv)
- Autodiff Usability: CLI and API methods to extract per-instruction context overhead information HOT 1
- Reflection API: Add features needed for slangpy
- Auto documentation code does not correctly exclude synthesized decl's from documentation
- Support `where` clause for defining generic constraints.
- Implement autodiff support for Tuple types.
- Implement `IFunc` proposal.
- Emit valid WGSL for all compute tests
- `tests\autodiff\generic-jvp.slang` test is incorrect
- Document rules for initializer lists
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from slang.