summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2017-07-13An array of resources in Vulkan only consumes one bindingTim Foley
Fixes #84 - When computing resource usage for an array type, don't multiply the resource usage of the element type by the element count foor descriptor-table-slot resources. - When reporting the "stride" of an array type through reflection, report the stride for descriptor table slots as zero, always.
2017-07-13Add several missing GLSL qualifiersTim Foley
Fixes #81 - This is based on a san over the GLSL spec (but is probably not exhaustive) - There are some qualifiers that are currently being handled by general-case code for all languages, and some of these happen to cover GLSL qualifiers too - Some of the qualifiers being handled by the general-case mechanism are *accidentally* working for GLSL (e.g., the HLSL `shared` qualifier doesn't mean the same thing as GLSL `shared`, but as long as we spit it back out nobody seems to care). - This should be fixed sooner or later.
2017-07-13Allow GLSL `#version` to be selected based on profileTim Foley
Fixes #83 - The basic idea is that I added a bunch of more specific profile names line `glsl_vertex_430` which indicate the desired GLSL version the user wants. - An explicit `#version` line in the code always overrides one specified by profile, though
2017-07-13Allow `spGetEntryPointCode` to return text results tooTim Foley
Fixes #77 - The `spGetEntryPointSource` function is now no longer needed, but I'm not going to "deprecate" it just yet
2017-07-13Don't emit C-style `#line` directives when directly generating GLSLTim Foley
- This fixes the render tests, which aren't tested by the continuous integration setup - This was broken in the commit that decided to use C-style directives all the time. - This works for stuff that eventually passes through glslang (or at least our build of it) - It *doensn't* work if we take the GLSL and pass it off to an OpenGL driver (which is what I do for testing) - A longer-term fix is still required to deal with line directives properly
2017-07-13Update version of `glslang` in submoduleTim Foley
2017-07-12Merge pull request #80 from tfoleyNV/falcor-workTim Foley
Fixes for shader cross-compilation
2017-07-12Add ability for intrinsics to require GLSL extensionsTim Foley
When cross-compiling, we need to detect when an intrinsic is used that required non-default GLSL capabilities and emit an appropriate `#extension ... : require` line. I'm handling this by attaching a custom modifier to declarations that require an extension in order to be callable.
2017-07-12Don't report error on assigning to an erroneous expressionTim Foley
An expression with error type may still fail the l-value check, but we don't want to emit an error in that case.
2017-07-12Don't emit interpolation modifiers on struct fields when outputting GLSLTim Foley
HLSL (and thus Slang) commonly puts interpolation modifiers like `sample` on the fields of `struct` types used as stage input/output, while GLSL only allows them on global-scope `in` and `out` variables (or ones in blocks). This change emits a really hacky filtering step to skip over certain modifiers when emitting a declaration. This lets us skip interpolation-mode modifiers when outputting a struct field to GLSL. Note: this probably gets the `in` or `out` block case wrong...
2017-07-12Use C-style line directives, even for GLSLTim Foley
- As long as we are always going to pass GLSL through glslang, there should be no harm in this - Eventually we may need to re-enable the old style
2017-07-12Properly register error on downstream compiler failureTim Foley
- The old code was just doing `exit(1)` if glslang or `D3DCompile` failed, which is obviously unacceptable - The new approach adds the output to the diagnostic buffer (or invokes the callback), and tracks the error count just like any other errors
2017-07-12Add tuple lowering logic for assignmentTim Foley
- When assigning tuples `(a0, ...) = (b0, ...)` generate a tuple of assignments `(a0 = b0, ...)` - Given an expression statement on a tuple `(a0, ...);` generate a sequence of statements `a0; ...`
2017-07-12Merge pull request #79 from tfoleyNV/sample-rate-reflectionTim Foley
Sample rate reflection
2017-07-12Add basic reflection query for checking if entry point is "sample-rate"Tim Foley
- This really just checks two basic things: 1. Was there any global variable declared with `in` and `sample`? 2. Did any code encountered during lowering referenece `gl_SampleIndex`? - This doesn't cover what HLSL could need, nor what we would need for cross-compilation. Consider it GLSL-specific for now. - In order to generate the information with even a reasonable chance of being accurate (not giving a ton of false positives) I tried to integrate the checks into the lowering process (so they only see code that is referenced, one hopes). - For this to work with my testing setup, I needed to make sure that lowering is always performed, prior to emitting reflection info - This change broke several reflection tests, because they had been using code that wouldn't actually pass the downstream compiler. I checked in fixes for those.
2017-07-12Add per-entry-point information to reflection JSON dumpsTim Foley
- This also adds reflection API for querying: - Entry point name - Entry point parameter list
2017-07-11Merge pull request #76 from tfoleyNV/gh-75Tim Foley
Make parser recovering more robust to avoid infinite loops
2017-07-11Make parser recovering more robust to avoid infinite loopsTim Foley
Fixes #75 In order to avoid cascaded errors, I went ahead and made the parser refuse to skip past a `}` in recovery mode. The problem with this is that we fail to make forward progress if we are stuck on a `}` (this happens if you have an extra `}` at the global scope.
2017-07-11Merge pull request #74 from tfoleyNV/resources-in-structsTim Foley
Resources in structs
2017-07-11Bug fixes for resources-in-structs.Tim Foley
2017-07-11Add GLSL lowerings for `ddx*` and `ddy*`Tim Foley
2017-07-11Bug fix for lowering of tuple types without layout.Tim Foley
- Don't try to extract the body layout for a field without a layout
2017-07-11Merge pull request #73 from tfoleyNV/image-type-reflectionTim Foley
Improve reporting of GLSL `image*` types
2017-07-11Merge pull request #72 from tfoleyNV/resources-in-structsTim Foley
Resources in structs
2017-07-11Improve reporting of GLSL `image*` typesTim Foley
- Update stdlib so taht `image*` types have read-write access encoded in their type - TODO: this isn't 100% right, since there are GLSL qualifiers that might override this - Add a test case to verify that the reflection API reports `image*` parameters
2017-07-11Initial work on handling resources in structs during cross-compilationTim Foley
- The basic idea is that during the "lowering" pass, some types (notably: aggregate types that contain resource variables) will get turned into "tuple" types, which are pseduo-types that aren't meant to survive lowering. - An attempt to declare a variable with a tuple type expands into a tuple of declarations - An attempt to reference such a tuple-ified variable leads to a tuple of expressions - An attempt to extract a member from such a tuple expression will pick the appropriate sub-element - Dereference a tuple by dereferencing the primary expression - Expand a tuple in the argument list to a call into N arguments (by recursively flattening the tuple) - Don't create tuple types when not generating GLSL - Make sure to preserve the specialized type of a call expression through lowering, since emission of unchecked calls relies on that info. - TODO: maybe the infix/prefix/postifx/select information should come in as a side-band? Should we have modifiers on expressions? - Make sure to offset the layout for a nested field based on teh base offset of its parent variable, when generating declarations for nested fields
2017-07-11Fixup for binary/string output.Tim Foley
Actually output SPIR-V/DXBC assembly as text, instead of binary. This fixes a bunch of tests that were passing on accident, because nothing was producing output.
2017-07-11Merge pull request #70 from tfoleyNV/support-more-sv-semanticsTim Foley
Support more sv semantics
2017-07-11Add GLSL translations for many `SV_*` semanticsTim Foley
I haven't tried to be 100% exhaustie, but this should cover the main cases we are likely to encounter in library code.
2017-07-11Don't emitting an imported declaration unless it is used.Tim Foley
This helps avoid the problem where we emit a function that does a `discard` and thus get a GLSL compilation failure in a vertex shader (that doesn't even call the function).
2017-07-11Update `.gitignore` to deal with render-test outputTim Foley
The rule of thumb so far is that expected output for `.slang` files should be checked in, but not for `.hlsl` or `.glsl`. The render test breaks that rule, because we never want to check in the expected output.
2017-07-10Merge pull request #67 from kyaoNV/spirvTim Foley
SPIR-V Support
2017-07-10Removed spGetTranslationUnitCode; Unified ↵Kai-Hwa Yao
EntryPointResult/TranslationUnitResult, added helper functionality; Ensure null termination when printing raw data
2017-07-10Don't assume vector contains contentsKai-Hwa Yao
2017-07-10Refactored compile output to work with raw data instead of StringsKai-Hwa Yao
2017-07-10Allow glslang wrapper to output regular SPIRV before disassemblyKai-Hwa Yao
2017-07-10Merge pull request #69 from tfoleyNV/falcor-fixesTim Foley
Handle function name properly for unchecked call
2017-07-10Handle function name properly for unchecked callTim Foley
The emit logic was checking for a missing decl, and then asking that same (missing) declaration for its name.
2017-07-10Merge pull request #68 from tfoleyNV/static-bug-fixTim Foley
Fix emission of `static` for HLSL
2017-07-10Fix emission of `static` for HLSLTim Foley
I forgot to include a trailing space.
2017-07-10Merge pull request #66 from tfoleyNV/falcor-workTim Foley
Falcor work
2017-07-10Add support for `imageBuffer`Tim Foley
This was mostly just a missing `typedef` in the Slang standard library code. This should also cover `textureBuffer` and `samplerBuffer`.
2017-07-10Try to be more robust against un-checked types during lowering, etc.Tim Foley
- Try to handle `ErrorType` gracefully when computing type layouts - When outputting a `TypeExp`, if the type part is errorneous (or missing), try to use the expression part - Make sure to lower the expressions side of a `TypeExp` during lowering
2017-07-10Merge pull request #65 from tfoleyNV/falcor-workTim Foley
Falcor work
2017-07-10Start handling system-value semantics during loweringTim Foley
I hadn't been lowering `SV_Position` outputs to `gl_Position`, and had somehow been relying on hidden driver behavior that I guess made things Just Work. This change adds some infrastructure to handle `SV_` semantics during lowering of an entry point (currently only covering `SV_Position` and `SV_Target`, FWIW). As a byproduct, this also means that a `VarLayout` stores semantic info, which could conceivably be exposed through reflection data now.
2017-07-10Cleanups for test cases:Tim Foley
- Allow a code-generation target of `NONE` in order to suppress ordinary output in test cases where we don't care about the actual output (just pass/fail result) - Add explicit `location` layout qualifiers to intermediate vertex-to-fragment variables in GLSL test cases for rendering, to work around apparent Intel driver bugs.
2017-07-10More cross-compilation fixesTim Foley
- Add GLSL mappings for more `Texture*` methods - The annoying one here is `Texture*.Load()` because it doesn't take a sampler, but the GLSL equivalent needs one (while the SPIR-V does *not*). I've hacked this pretty seriously for now. - Try to ensure that we add `uniform` to global declarations that need it in GLSL - When outputting an `in` or `out` variable that might have been created from an `inout` shader parameter, filter the layout qualifiers that we output to only cover the appropriate resource kind.
2017-07-09Ensure that lowered globals for `inout` shader parameters have unique namesTim Foley
If the user had a shader entry point with an `inout` parameter, we would end up lowering it to two GLSL global variables with the same name. This change adds a `SLANG_in_` or `SLANG_out_` prefix to the two declarations. Note: I haven't dealt with the issue that we end up printing two different `layout` qualifiers on such a variable...
2017-07-09Fix up scoping for cross-compiled `main()` bodyTim Foley
The earier changes to add sequence statements and change how the `isBuildingStmt` logic in lowering works doesn't work for this logic, which assumes it can just set `isBuildingStmt` and be sure that decls will go into the right place.
2017-07-09Pick layout rules based on target languge, not source.Tim Foley
The tricky bit here was that the `reflection-json` output format isn't really a code generation target like the others, and we need to be able to have multiple "targets" active to make sense of it. This needs cleaning-up.