Compilers: principles, techniques, and tools
Compilers: principles, techniques, and tools
A language for shading and lighting calculations
SIGGRAPH '90 Proceedings of the 17th annual conference on Computer graphics and interactive techniques
Generative modeling for computer graphics and CAD: symbolic shape design using interval analysis
Generative modeling for computer graphics and CAD: symbolic shape design using interval analysis
Generative modeling: a symbolic system for geometric modeling
SIGGRAPH '92 Proceedings of the 19th annual conference on Computer graphics and interactive techniques
Implicit parameters: dynamic scoping with static types
Proceedings of the 27th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A user-programmable vertex engine
Proceedings of the 28th annual conference on Computer graphics and interactive techniques
A real-time procedural shading system for programmable graphics hardware
Proceedings of the 28th annual conference on Computer graphics and interactive techniques
The Cg Tutorial: The Definitive Guide to Programmable Real-Time Graphics
The Cg Tutorial: The Definitive Guide to Programmable Real-Time Graphics
Journal of Functional Programming
Implementing an embedded GPU language by combining translation and generation
Proceedings of the 2006 ACM symposium on Applied computing
Closing the stage: from staged code to typed closures
PEPM '08 Proceedings of the 2008 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Shifting the stage: staging with delimited control
Proceedings of the 2009 ACM SIGPLAN workshop on Partial evaluation and program manipulation
Huge Data But Small Programs: Visualization Design via Multiple Embedded DSLs
PADL '09 Proceedings of the 11th International Symposium on Practical Aspects of Declarative Languages
Type-safe observable sharing in Haskell
Proceedings of the 2nd ACM SIGPLAN symposium on Haskell
Nikola: embedding compiled GPU functions in Haskell
Proceedings of the third ACM Haskell symposium on Haskell
Accelerating Haskell array codes with multicore GPUs
Proceedings of the sixth workshop on Declarative aspects of multicore programming
ChalkBoard: mapping functions to polygons
IFL'09 Proceedings of the 21st international conference on Implementation and application of functional languages
A declarative API for particle systems
PADL'11 Proceedings of the 13th international conference on Practical aspects of declarative languages
TFP'10 Proceedings of the 11th international conference on Trends in functional programming
Obsidian: a domain specific embedded language for parallel programming of graphics processors
IFL'08 Proceedings of the 20th international conference on Implementation and application of functional languages
Shifting the stage: Staging with delimited control
Journal of Functional Programming
Palovca: describing and executing graph algorithms in haskell
PADL'12 Proceedings of the 14th international conference on Practical Aspects of Declarative Languages
Synthesising graphics card programs from DSLs
Proceedings of the 33rd ACM SIGPLAN conference on Programming Language Design and Implementation
Optimising purely functional GPU programs
Proceedings of the 18th ACM SIGPLAN international conference on Functional programming
Proceedings of the 2nd ACM SIGPLAN workshop on Functional high-performance computing
Hi-index | 0.00 |
Graphics cards for personal computers have recently undergone a radical transformation from fixed-function graphics pipelines to multi-processor, programmable architectures. Multi-processor architectures are clearly advantageous for graphics for the simple reason that graphics computations are naturally concurrent, mapping well to stateless stream processing. They therefore parallelize easily and need no random access to memory with its problematic latencies.This paper presents Vertigo, a purely functional, Haskell-embedded language for 3D graphics and an optimizing compiler that generates graphics processor code. The language integrates procedural surface modeling, shading, and texture generation, and the compiler exploits the unusual processor architecture. The shading sub-language is based on a simple and precise semantic model, in contrast to previous shading languages. Geometry and textures are also defined via a very simple denotational semantics. The formal semantics yields not only programs that are easy to understand and reason about, but also very efficient implementation, thanks to a compiler based on partial evaluation and symbolic optimization, much in the style of Pan [2].Haskell's overloading facility is extremely useful throughout Vertigo. For instance, math operators are used not just for floating point numbers, but also expressions (for differentiation and compilation), tuples, and functions. Typically, these overloadings cascade, as in the case of surfaces, which may be combined via math operators, though they are really functions over tuples of expressions on floating point numbers. Shaders may be composed with the same notational convenience. Functional dependencies are exploited for vector spaces, cross products, and derivatives.