Hans-Kristian Arntzen
762c3082ae
Merge pull request #1564 from KhronosGroup/fix-1558
...
GLSL: Emit nonuniformEXT in correct place for late-combined samplers.
2020-12-07 14:07:38 +01:00
Hans-Kristian Arntzen
a11c4780d0
GLSL: Emit nonuniformEXT in correct place for late-combined samplers.
...
Need to emit nonuniformEXT(sampler2D()) since constructor expressions in
Vulkan GLSL do not propgate the nonuniform qualifier.
2020-12-07 13:00:15 +01:00
Hans-Kristian Arntzen
dc940846d7
GLSL/HLSL: Disallow VariablePointers capability outright.
...
Cannot be supported, error out early.
2020-12-07 12:16:02 +01:00
Hans-Kristian Arntzen
cf1e9e0643
Add MIT dual license for the SPIRV-Cross API.
2020-12-01 16:47:08 +01:00
Hans-Kristian Arntzen
e07f0a9df5
GLSL: Fix buffer_reference with aliased names.
2020-11-23 16:36:49 +01:00
Hans-Kristian Arntzen
c5826b4b69
GLSL: Emit storage qualifiers for buffer_reference.
2020-11-23 16:26:33 +01:00
Hans-Kristian Arntzen
6a614cc7f7
Normalize all internal workaround methods to use spv prefix.
...
We have been interchanging spv and SPIRV_Cross_ for a while, which
causes weirdness since we don't explicitly ban SPIRV_Cross identifiers,
as these identifiers are generally used for interface variable
workarounds.
2020-11-23 15:42:27 +01:00
rdb
df5e3730ca
GLSL: Require GL_ARB_vertex_attrib_64bit for double input in pre-4.10
2020-11-16 22:14:46 +01:00
rdb
10fa5f62aa
GLSL: Legacy / extension fallbacks for textureSize and texelFetch
2020-11-09 15:26:46 +01:00
Hans-Kristian Arntzen
6fc2a0581a
Run format_all.sh.
2020-11-08 13:59:52 +01:00
rdb
509908d8db
GLSL: Add error checking and extension fallback for textureGather
2020-11-07 16:49:18 +01:00
Hans-Kristian Arntzen
683c3f5c3f
Merge pull request #1530 from rdb/legacy-glsl-round
...
GLSL: Provide round/roundEven for legacy GLSL
2020-11-07 16:40:18 +01:00
Hans-Kristian Arntzen
ea334c14bc
Merge pull request #1527 from rdb/legacy-transpose
...
GLSL: implement transpose() in GLSL 1.10 / ES 1.00
2020-11-07 16:37:59 +01:00
rdb
b3bd674aa7
GLSL: Remove unused lod
argument from legacy_tex_op()
2020-11-07 12:43:53 +01:00
rdb
bf71994dae
GLSL: implement transpose() in GLSL 1.10 / ES 1.00
2020-11-06 22:27:54 +01:00
rdb
9e6e5d2738
GLSL: Fix round/roundEven for legacy GLSL.
2020-11-06 17:34:38 +01:00
rdb
e8c500ceef
GLSL: Fix support for textureLod in legacy vertex shaders
2020-11-06 16:37:27 +01:00
Hans-Kristian Arntzen
244839d350
Merge pull request #1516 from billhollings/VK_EXT_descriptor_indexing
...
MSL: Support run-time sized image and sampler arrays
2020-11-03 10:15:36 +01:00
Mateusz Kielan
9a1af25f02
Merge pull request #2 from KhronosGroup/master
...
AMD workaround
2020-10-31 21:54:58 +01:00
devsh
6c5f394b09
Fix some bad assumptions about emulating subgroupBarrier
2020-10-31 21:46:59 +01:00
Bill Hollings
7f67abe0fe
Minor format and typo updates from code review.
2020-10-30 16:05:44 -04:00
Hans-Kristian Arntzen
439b666829
GLSL: Fix nonuniformEXT injection.
...
Needs to consider that other expressions might be using brackets as well
...
2020-10-30 14:11:16 +01:00
Bill Hollings
b7b0e804e5
MSL: Support run-time sized image and sampler arrays
...
(GL_EXT_nonuniform_qualifier/SPV_EXT_descriptor_indexing).
MSLResourceBinding includes array size through API, and substitutes
in that size if the image or sampler array is not explicitly sized.
OpCopyObject supports SPIRCombinedImageSampler type in MSL.
2020-10-29 18:50:42 -04:00
Hans-Kristian Arntzen
08e49bfd67
Merge pull request #1508 from KhronosGroup/fix-1507
...
Handle case where block is loop header, continue AND break block.
2020-10-28 16:04:14 +01:00
Hans-Kristian Arntzen
542d460364
Handle case where block is loop header, continue AND break block.
2020-10-27 12:29:08 +01:00
Hans-Kristian Arntzen
e47561a28b
GLSL: Support a workaround for loading row-major matrices.
...
On AMD Windows OpenGL, it has been reported that we need to load
matrices via a wrapper function.
2020-10-27 12:07:09 +01:00
Hans-Kristian Arntzen
0db1569e97
Merge pull request #1492 from KhronosGroup/non-native-matrix-fix
...
GLSL: Use need_transpose when checking for non-native matrix.
2020-10-15 10:52:44 +02:00
Chip Davis
3e6010d8c5
MSL: Don't use a bitcast for tessellation levels in tesc shaders.
...
`half` cannot be bitcasted to `float`, because the two types are not the
same size. Use an expanding cast instead.
We were already doing this for stores to the tessellation levels; why I
didn't also do this for loads is beyond me.
2020-10-14 18:35:59 -05:00
Hans-Kristian Arntzen
120af42616
GLSL: Use need_transpose when checking for non-native matrix.
2020-10-14 16:07:10 +02:00
Hans-Kristian Arntzen
5619329665
Style nits for GL subgroup implementation.
2020-10-08 13:25:29 +02:00
Hans-Kristian Arntzen
819c599ecd
Merge branch 'issues1350-2' of git://github.com/devshgraphicsprogramming/SPIRV-Cross into master
2020-10-08 12:20:07 +02:00
criss
db52e277b9
Resolved issues 1350, 1351, 1352
2020-10-08 12:14:52 +02:00
Hans-Kristian Arntzen
e0c9aad934
GLSL: Add support for transform_feedback3 geometry streams.
2020-09-30 13:01:35 +02:00
Hans-Kristian Arntzen
7a99d1cb72
GLSL: Use literal array size for cull/clip array sizes.
2020-09-30 13:01:18 +02:00
Hans-Kristian Arntzen
5ea576ece2
Allow flip_vert_y in all relevant stages.
2020-09-28 14:10:08 +02:00
Hans-Kristian Arntzen
2144274a91
Clean up conditional branch codegen.
...
Should only need to look at whether or not we're branching to our own
merge target. Any other branch needs to emit code in some way.
2020-09-17 12:12:37 +02:00
Hans-Kristian Arntzen
54cc0b01f6
Deal with case where a selection construct conditionally merges/breaks.
2020-09-17 12:02:43 +02:00
Hans-Kristian Arntzen
66afe8c499
Implement a simple evaluator of specialization constants.
...
In some cases, we need to get a literal value from a spec constant op.
Mostly relevant when emitting buffers, so implement a 32-bit integer
scalar subset of the evaluator. Can be extended as needed to support
evaluating any specialization constant operation.
2020-09-14 11:45:59 +02:00
Hans-Kristian Arntzen
18d03b3ea6
Handle OpUndef %void.
...
Apparently this is legal and spirv-opt is starting to emit this kind of
code now.
2020-09-04 09:29:44 +02:00
Hans-Kristian Arntzen
3360daa6f3
MSL: Fix OpCompositeInsert and OpVectorInsertDynamic.
...
Need to take care of unpacked RHS expressions.
2020-09-02 10:27:39 +02:00
Hans-Kristian Arntzen
a07441568e
Overhaul how we deal with reserved identifiers.
...
- Do not silently drop reserved identifiers in the parser. This makes it
possible to reflect identifiers which are reserved by the
cross-compiler module.
- Instead of dropping the name, emit _RESERVED_IDENTIFIER_FIXUP in the
source to make it clear that a name has been rewritten.
- Document what is reserved and not.
2020-08-21 16:33:27 +02:00
Hans-Kristian Arntzen
fad36a6b28
HLSL: Deal with partially filled 16-byte word in cbuffers.
...
The last element of an array or matrix in HLSL cbuffers are not filled
completely, but only have a size equal to the base vector.
2020-08-20 16:05:21 +02:00
Hans-Kristian Arntzen
dd1f53ff15
HLSL: Fix bug in is_packing_standard for cbuffer.
...
Was not keeping offset in sync with actual_offset and HLSL could trigger
spurious realignments due to the straddle check.
2020-08-20 15:26:55 +02:00
Hans-Kristian Arntzen
eb580d6656
Ensure that we use primary alias type when emitting flattened members.
2020-07-29 13:02:25 +02:00
Hans-Kristian Arntzen
aac6885950
GLSL: Be more aggressive about using type_alias.
...
To facilitate an improved linking-by-name use case for older GL,
we will be more aggressive about merging struct definitions, even for
rather unrelated cases where we don't strictly need to use type aliases.
2020-07-29 12:48:41 +02:00
Hans-Kristian Arntzen
038b0bf238
Only rewrite type aliases for the base type.
2020-07-29 12:48:41 +02:00
Hans-Kristian Arntzen
57c93d44ac
GLSL: Add option to force flattening IO blocks.
...
It is not always desirable to use actual blocks.
A prime example in the case where EXT_shader_io_blocks is not supported
on the target implementation.
2020-07-28 15:16:06 +02:00
Hans-Kristian Arntzen
fa5b206d97
MSL: Workaround broken vector -> scalar access chain in MSL.
...
On MSL, the compiler refuses to allow access chains into a normal vector type.
What happens in practice instead is a read-modify-write where a vector type is
loaded, modified and written back.
The workaround is to convert a vector into a pointer-to-scalar before
the access chain continues to add the scalar index.
2020-07-06 10:03:44 +02:00
Hans-Kristian Arntzen
2ac8f51b06
GLSL: Support I/O flattening with arrays as final type.
2020-07-06 09:18:30 +02:00
Hans-Kristian Arntzen
2d43103a55
GLSL: Support multi-level struct flattening for I/O.
2020-07-03 14:38:51 +02:00
Hans-Kristian Arntzen
d573a95a9c
Run format_all.sh.
2020-07-01 11:42:58 +02:00
Hans-Kristian Arntzen
70f17142de
GLSL: Fix nested legacy switch workarounds.
2020-06-30 12:02:24 +02:00
Hans-Kristian Arntzen
b1082c10af
Merge pull request #1410 from KhronosGroup/fix-1406
...
GLSL: Support switch more properly in legacy ESSL
2020-06-29 15:22:39 +02:00
Hans-Kristian Arntzen
4d79d634f5
GLSL: Implement switch on ESSL 1.0.
...
Cannot use switch on legacy ESSL, fallback to plain branches.
2020-06-29 13:35:46 +02:00
Hans-Kristian Arntzen
bae76d7915
GLSL: Use for-loop fallback instead of do/while for legacy ESSL.
...
do/while loops are not guaranteed to be supported in ESSL 1.0 / OpenGLES
2.0 implementations.
2020-06-29 12:50:31 +02:00
Hans-Kristian Arntzen
3afbfdb090
Implement context-sensitive expression read tracking.
...
When inside a loop, treat any read of outer expressions to happen
multiple times, forcing a temporary of said outer expressions.
This avoids the problem where we can end up relying on loop-invariant code motion to happen in the
compiler when converting optimized shaders.
2020-06-29 12:20:35 +02:00
Hans-Kristian Arntzen
05188aca69
Fix bug with control dependent expression tracking.
...
For a direct branch without merge, we lost control dependent
expressions.
2020-06-29 10:55:50 +02:00
Hans-Kristian Arntzen
eb0f0323d3
HLSL: Workaround FXC bugs with degenerate switch blocks.
...
When we see a switch block which only contains one default block, emit a
do {} while(false) statement instead, which is far more idiomatic and
readable anyways.
2020-06-23 15:39:04 +02:00
Hans-Kristian Arntzen
f141521ebe
Fix duplicated initialization for loop variables with initializers.
2020-06-19 10:51:00 +02:00
Hans-Kristian Arntzen
7314f51a32
MSL: Deal with loading non-value-type arrays.
2020-06-18 12:46:39 +02:00
Hans-Kristian Arntzen
03d4bcea68
MSL: Improve handling of array types in buffer objects.
...
When loading and storing array types which belong to buffer objects, we
need to treat these values as not being value types. Also, need to
handle array load/store from/to more address space combinations.
2020-06-18 11:49:03 +02:00
Chip Davis
5281d9997e
MSL: Fix up input variables' vector lengths in all stages.
...
Metal is picky about interface matching. If the types don't match
exactly, down to the number of vector components, Metal fails pipline
compilation. To support pipelines where the number of components
consumed by the fragment shader is less than that produced by the vertex
shader, we have to fix up the fragment shader to accept all the
components produced.
2020-06-16 14:50:30 -05:00
rdb
031cbaa5a2
GLSL: Require GL_ARB_draw_instanced for gl_InstanceID in GLSL < 1.40
2020-06-12 22:42:26 +02:00
Hans-Kristian Arntzen
f383cc98f2
GLSL: Handle the rest of GL_ARB_sparse_texture_clamp.
...
Missed these in initial sparse implementation.
2020-06-08 13:40:11 +02:00
Hans-Kristian Arntzen
857e1c445c
GLSL: Support uint code for sparse residency query.
2020-06-08 11:40:02 +02:00
Hans-Kristian Arntzen
cbe0cca73b
Refactor texture fetch function generation.
...
Use structs instead of a million bool/uint32_t arguments passed on stack.
2020-06-08 10:17:40 +02:00
Hans-Kristian Arntzen
275974e062
GLSL: Implement sparse feedback.
2020-06-04 15:50:28 +02:00
Hans-Kristian Arntzen
d31bc0247e
Do not mask writes to remapped variables in all cases.
...
If they don't have a static expression we should still write to it.
2020-05-28 11:49:28 +02:00
Hans-Kristian Arntzen
ef247e75ec
GLSL: Improve support for GL_ARB_shader_draw_parameters in desktop GLSL.
...
Opt-in to using the extension to support gl_InstanceIndex.
2020-05-22 12:53:34 +02:00
Hans-Kristian Arntzen
66ec3e3e54
GLSL: Support ray payloads and hit attributes declared as Block.
2020-05-20 15:07:47 +02:00
Hans-Kristian Arntzen
271ad33380
GLSL: Add some more focused RT test shaders.
2020-05-20 14:11:28 +02:00
Hans-Kristian Arntzen
86380acf4d
Support gl_InstanceID in RT shaders.
2020-05-08 13:39:43 +02:00
Hans-Kristian Arntzen
9b7140e2ba
Implement OpAtomicLoad/OpAtomicStore.
...
Need some emulation on GLSL/HLSL, fix bug with atomic store on MSL.
2020-04-27 12:11:46 +02:00
Hans-Kristian Arntzen
5e5d1c27ce
GLSL: Support f16x2 <-> f32 bitcast.
...
There is no native formulation, so introduce a concept of a "complex"
bitcast to handle odd-ball cases which have no native unary operation.
2020-04-21 23:27:33 +02:00
Hans-Kristian Arntzen
c58839bfd4
Merge pull request #1336 from KhronosGroup/fix-1333
...
Handle RayQueryKHR type.
2020-04-21 16:31:22 +02:00
Hans-Kristian Arntzen
bdb343ea06
Be a bit more careful what nonuniform state is propagated.
2020-04-21 14:48:44 +02:00
Hans-Kristian Arntzen
6b0e558169
Handle RayQueryKHR type.
...
Do not error out in parsing in shaders which use ray queries.
2020-04-21 14:25:18 +02:00
Hans-Kristian Arntzen
b2e934b53f
Merge pull request #1328 from devshgraphicsprogramming/patch-1
...
Try and solve issue #1327
2020-04-21 14:06:27 +02:00
Hans-Kristian Arntzen
5cb0f0a640
Merge pull request #1335 from KhronosGroup/fix-1325
...
GLSL/HLSL: Implement unpack/pack2x32Uint
2020-04-21 14:05:12 +02:00
Mateusz Kielan
127224d816
Fix issue #1327
...
Drop the nonuniform_qualifier in GLSL downcompile NV_gpu_shader5 supports divergent indexing transparently, but obviously runtime sized descriptor arrays are not supported by anything in OpenGL.
2020-04-21 13:29:30 +02:00
Asuka
55dfbead2f
GLSL/HLSL: Support packUint2x32 and unpackUint2x32
2020-04-21 11:34:12 +02:00
Hans-Kristian Arntzen
f8592ecdfc
MSL: Deal correctly with initializers on Private variables.
...
Do not attempt to defer declaration. It would happen to work in most
cases, but the edge case is where the first thing that happens to a
variable is being OpStore'd into.
2020-04-21 11:20:49 +02:00
Hans-Kristian Arntzen
c7b75a8fe6
MSL: Do not use base expression with PhysicalTypeID OpCompositeExtract.
...
Similar reasoning as packed expressions.
2020-04-07 18:25:44 +02:00
Hans-Kristian Arntzen
941cceedb4
Expose a query if samplers or images are comparison resources.
2020-04-03 17:43:42 +02:00
Hans-Kristian Arntzen
b691b7d1e3
Do not add NonWritable/NonReadable decorations for regular images.
2020-04-03 17:43:42 +02:00
Hans-Kristian Arntzen
b8905bbd95
Add support for forcefully zero-initialized variables.
...
Useful to better support certain platforms which require all variables
to be initialized to something.
2020-03-26 13:38:27 +01:00
Hans-Kristian Arntzen
04e877df12
GLSL: Implement GL_EXT_shader_framebuffer_fetch.
2020-03-19 14:53:39 +01:00
Hans-Kristian Arntzen
c2655ab291
Run format_all.sh.
2020-03-19 14:22:49 +01:00
Hans-Kristian Arntzen
05004a57ea
GLSL/HLSL: Fix nonuniform qualifier for SSBO atomics.
2020-03-19 12:05:27 +01:00
Hans-Kristian Arntzen
a3d3c80dd7
GLSL/HLSL: Implement nonuniform qualifier for image atomics.
2020-03-19 11:35:29 +01:00
Hans-Kristian Arntzen
01968c4486
Add option to disable storage image qualifier deduction.
2020-03-04 16:42:31 +01:00
Hans-Kristian Arntzen
30343f3e95
MSL: Reintroduce workaround for constant arrays being passed by value.
2020-02-24 13:22:52 +01:00
Hans-Kristian Arntzen
c9d4f9cd74
MSL: Add a workaround path to force native arrays for everything.
2020-02-24 12:47:14 +01:00
Hans-Kristian Arntzen
dfffbb1cf3
Compile fix on older compilers.
2020-01-27 15:56:47 +01:00
Hans-Kristian Arntzen
655312cb47
GLSL: Support GL_ARB_enchanced_layouts for XFB.
2020-01-27 13:11:38 +01:00
Hans-Kristian Arntzen
f9818f0804
Update license headers to 2020.
2020-01-16 15:24:37 +01:00
Hans-Kristian Arntzen
f79c1e2fed
Deal with illegal names in types as well.
...
- Fixes issue with clip_distance flattening in MSL where member to
flatten from would come from to_member_name, where it should have used
the builtin name directly. This member name was modified by this patch
and broke clip distance test shaders.
- Some cleanups with ir.meta, use ir.find_meta instead to not create
unnecessary hashmap nodes.
2020-01-16 10:34:49 +01:00
Hans-Kristian Arntzen
55fe6050fe
GLSL: Implement geometry shader passthrough extension.
2020-01-15 16:18:29 +01:00
Hans-Kristian Arntzen
5253da9e63
GLSL: Deal with sign in subgroup Min/Max operations.
2020-01-09 12:35:14 +01:00
Hans-Kristian Arntzen
c256525c7b
Run format_all.sh.
2020-01-08 14:27:34 +01:00
Hans-Kristian Arntzen
151ff1e870
HLSL: Implement stores for complex composites in ByteAddressBuffers.
2020-01-08 14:17:28 +01:00
Hans-Kristian Arntzen
ca9398c122
HLSL: Support loading complex composites from ByteAddressBuffer.
2020-01-08 13:05:56 +01:00
Hans-Kristian Arntzen
b522b409ae
Run format_all.sh.
2020-01-08 10:48:30 +01:00
Hans-Kristian Arntzen
93f3265fe0
MSL: Deal with packing vectors for vertex input/fragment output.
2020-01-07 14:14:31 +01:00
Hans-Kristian Arntzen
91e917b8ca
Fix Clang warnings.
2020-01-06 13:40:33 +01:00
Hans-Kristian Arntzen
cf725b4c63
Go through access chain path for OpCopyLogical.
...
We will need to deal with packing/unpacking data when copying from/to
complex types in MSL.
2020-01-06 12:29:44 +01:00
Hans-Kristian Arntzen
9012a39b60
Basic implementation of OpCopyLogical.
2020-01-06 11:47:26 +01:00
Hans-Kristian Arntzen
7c1e34f3b9
GLSL: Fix array of input patch variables.
...
Hoist out the hack to make array sizes unsized to a place where we can
differentiate patch variables from control point variables.
2019-12-10 12:02:12 +01:00
Hans-Kristian Arntzen
d7e612f91a
GLSL: Fix EmitStreamVertex/Primitive.
2019-12-09 10:49:48 +01:00
Hans-Kristian Arntzen
00d5c78447
Remove obsolete use of AtomicCounterMemoryMask.
2019-12-04 15:30:07 +01:00
Hans-Kristian Arntzen
67b2991451
Don't emit memoryBarrierShared() in workgroup control barriers.
...
This is implied in both GL and GLES. Emitting memoryBarrierShared() was
based on earlier confusion in the spec which has since been fixed and
clarified.
2019-12-04 15:06:19 +01:00
Hans-Kristian Arntzen
4edb99d476
Fix sign handling for S/UToF.
2019-11-28 13:55:28 +01:00
Hans-Kristian Arntzen
f5cb08c42f
Mark loop headers as complex as early as possible.
...
We had a case where loops were marked complex in a cascading fashion
where each loop iteration would discover one new complex loop. This was
a problem with three nested loops.
2019-11-26 11:01:39 +01:00
Hans-Kristian Arntzen
0b417b586a
HLSL: Report more explicitly which member failed validation.
...
This will be awkward to report in GLSL where we check multiple packing
standards, but for HLSL it should be easy since there's only CBuffer
packing standard to worry about.
2019-11-06 11:21:39 +01:00
Hans-Kristian Arntzen
a8d676f2e4
GLSL: Fix issue with array-of-array inputs in tess.
...
Only one dimension can be unsized and wrong dimension was used for
unrolling purposes.
2019-11-04 10:34:49 +01:00
Hans-Kristian Arntzen
8f13a3f4b1
MSL: Remove workaround for passing constant arrays to functions.
...
Arrays are value-types now, so remove the old workaround.
2019-10-28 12:14:43 +01:00
Hans-Kristian Arntzen
fa011f8547
MSL: Declare arrays with proper type wrapper.
...
Need to construct with value type spvUnsafeArray<T, N>({ elem0, elem1 })
to make array initialization work in complex scenarios.
2019-10-26 17:57:34 +02:00
Hans-Kristian Arntzen
3f569ed5ec
GLSL: Minor nit, check flushed_phi_variables with count().
2019-10-26 16:10:12 +02:00
Hans-Kristian Arntzen
9d18c82364
Clean up call to builtin_translates_to_nonarray.
...
get_decoration is better than poking in ir.meta manually.
2019-10-26 16:10:12 +02:00
Hans-Kristian Arntzen
3b5c4c7316
Implement constant empty struct correctly on all backends.
...
MSL actually supports empty structs, so enable that path as well.
2019-10-26 16:10:11 +02:00
Hans-Kristian Arntzen
8066d13599
MSL: Rewrite propagated depth comparison state handling.
...
Far cleaner, and more correct to run the traversal twice.
Fixes a case where we propagate depth state through multiple functions.
2019-10-26 16:10:11 +02:00
Hans-Kristian Arntzen
6edbf0c9e9
MSL: Minor cleanups for texture atomic emulation.
...
Storing pointers to internal objects is generally not done, IDs are
preferred.
2019-10-24 11:30:20 +02:00
Lukas Hermanns
6673a675ba
Simplified overriding of 'access_chain_internal' function in CompilerMSL.
2019-10-22 11:06:16 -04:00
Lukas Hermanns
84351d3aed
Merge remote-tracking branch 'upstream/master'
2019-10-21 18:55:36 -04:00
Hans-Kristian Arntzen
4550f18b37
Fix OpVectorExtractDynamic with spec constant op index.
...
We cannot lower this to a swizzle, keep it dynamically indexed.
2019-10-17 11:12:14 +02:00
Lukas Hermanns
2482ff708c
Merge remote-tracking branch 'upstream/master'
2019-10-14 11:06:15 -04:00
Hans-Kristian Arntzen
a9be92569f
HLSL: Fix unrolled S/G LE/LT/GE/GT opcodes.
...
Need to bitcast the unrolled expressions as well.
2019-10-14 16:08:39 +02:00
Hans-Kristian Arntzen
3bf9fa7ed6
GLSL: Deal correctly with bitwidth on integer compares.
2019-10-14 15:23:38 +02:00
Hans-Kristian Arntzen
b960ae3b70
HLSL: Partially implement Unordered compare.
...
We cannot correctly implement unordered equal/ordered not equal without
a lot of extra instructions which slows normal code down.
2019-10-14 15:15:03 +02:00
Hans-Kristian Arntzen
14a4b087fb
GLSL: Support unordered floating point compare.
...
There is no direct way to express this, so invert boolean results to
force any NaN -> true. glslang emits Ordered compare instructions
everywhere, and the GLSL spec is not clear on this, so assume this is
fine.
2019-10-14 13:48:22 +02:00
Hans-Kristian Arntzen
07e9501ae1
MSL: Fix regression with OpCompositeConstruct from std140 float[].
...
Simple fix, just need to use to_unpacked_expression rather than to_expression here to
deal with this.
2019-10-11 11:21:43 +02:00
Lukas Hermanns
688a39e7f8
Merge remote-tracking branch 'upstream/master'
2019-10-09 10:12:04 -04:00
Hans-Kristian Arntzen
f59688b5d1
Workaround MSVC issue.
2019-10-07 12:40:21 +02:00
Hans-Kristian Arntzen
a0c13e4ee8
Do not consider aliased struct types if the master is not a block.
...
It is possible for a shader to declare two plain struct types which
simply share the same OpName without there being an implicit
value/buffer alias relationship.
For to_member_name(), make sure to use the type alias master when
resolving member names. The member name may be different in a type alias
master if the SPIR-V is being intentionally difficult.
2019-10-07 10:52:16 +02:00
Lukas Hermanns
f3a6d28a1d
Further updates for pull request #1162 ; also added two test cases for spvCubemapTo2DArrayFace function and added '--msl-framebuffer-fetch'/ '--msl-emulate-cube-array' compiler options.
2019-09-27 15:49:54 -04:00
Lukas Hermanns
7ad0a84778
Updates for pull request #1162
2019-09-24 14:35:25 -04:00
Lukas Hermanns
37df74035b
Merge branch 'ue4_dev'
2019-09-20 09:42:42 -04:00
Hans-Kristian Arntzen
3c11254ece
MSL: Fix 16-bit integer literals.
...
There is no suffix, so bitcasts failed.
2019-09-19 10:19:51 +02:00
Lukas Hermanns
50ac6862ac
Rearranged all 'UE Change' comments to match to project's coding style.
2019-09-18 14:03:54 -04:00
Hans-Kristian Arntzen
c3ff67c3f0
Fix -Wshorten-64-to-32 warnings.
2019-09-17 10:18:38 +02:00
Lukas Hermanns
a9f3c981d9
Adjustments after rebase of ue4_dev branch.
2019-09-13 14:03:02 -04:00
Mark Satterthwaite
c4f9704af0
OpImageTexelPointer needs to use an int coordinate type for GLSL, but not for MSL.
2019-09-12 08:52:08 -04:00
Mark Satterthwaite
e4c6388571
More fixes to handling packing & access elements in an array. Made in two parts. 1. Don't allow AccessChain operations to add duplicated swizzles when accessing packed arrays. 2. Only pack arrays when there is the proper amount of space between members in a struct, otherwise it will definitely be wrong.
2019-09-11 16:15:10 -04:00
Mark Satterthwaite
a80c74b40e
There are occasions where phi-variable copies are introduced for original variables which are fully declared, which coud result in the phi-variable never being declared and the shader not compiling, so declare the phi-variables when this happens. Change made in two parts. 1. Ensure that we declare phi-variable copies even if the original declaration isn't deferred. 2. Only flush phi variables once, avoids duplicate definitions.
2019-09-11 14:00:49 -04:00
Mark Satterthwaite
2af70b837c
When converting from HLSL the dxc SPIRV output often contains variables that are written through (e.g. a = b = c;) which seems to break the tracking of expressions in SPIRV-Cross, so don't reset everything once configured.
2019-09-10 13:25:20 -04:00
Mark Satterthwaite
42b8a62870
Fixes to the generation of Metal tessellation shaders from SPIRV so that it works correctly in more complicated cases.
...
First, when generating from HLSL before invoking the code that comes from the HLSL patch-function a control-flow and full memory-barrier are required to ensure that all the temporary values in thread-local storage for the patch are available.
Second, the inputs to control and evaluation shaders must be properly forwarded from the global variables in SPIRV to the member variables in the relevant input structure.
Finally when arrays of interpolators are used for input or output we need to add an extra level of array indirection because Metal works at a different granularity than SPIRV.
Five parts.
1. Fix tessellation patch function processing.
2. Fix loads from tessellation control inputs not being forwarded to the gl_in structure array.
3. Fix loads from tessellation evaluation inputs not being forwarded to the stage_in structure array.
4. Workaround SPIRV losing an array indirection in tessellation shaders - not the best solution but enough to keep things progressing.
5. Apparently gl_TessLevelInner/Outer is special and needs to not be placed into the input array.
2019-09-10 10:37:07 -04:00
Hans-Kristian Arntzen
333980ae91
Refactor into stronger types in public API.
...
Some fallout where internal functions are using stronger types.
Overkill to move everything over to strong types right now, but perhaps
move over to it slowly over time.
2019-09-06 12:29:47 +02:00
Chip Davis
cb35934248
MSL: Support dynamic offsets for buffers in argument buffers.
...
Vulkan has two types of buffer descriptors,
`VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC` and
`VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC`, which allow the client to
offset the buffers by an amount given when the descriptor set is bound
to a pipeline. Metal provides no direct support for this when the buffer
in question is in an argument buffer, so once again we're on our own.
These offsets cannot be stored or associated in any way with the
argument buffer itself, because they are set at bind time. Different
pipelines may have different offsets set. Therefore, we must use a
separate buffer, not in any argument buffer, to hold these offsets. Then
the shader must manually offset the buffer pointer.
This change fully supports arrays, including arrays of arrays, even
though Vulkan forbids them. It does not, however, support runtime
arrays. Perhaps later.
2019-09-05 23:29:00 -05:00
Mark Satterthwaite
d50659af92
Rework the way arrays are handled in Metal to remove the array copies as they are unnecessary from Metal 1.2. There were cases where copies were not being inserted and others appeared unncessary, using the template type should allow the 'metal' compiler to do the best possible optimisation. The changes are broken into three stages. 1. Allow Metal to use the array<T> template to make arrays a value type. 2. Force the use of C style array declaration for some cases which cannot be wrapped with a template. 3. Threadgroup arrays can't have a wrapper type. 4. Tweak the code to use unsafe_array in a few more places so that we can handle passing arrays of resources into the shader and then through shaders into sub-functions. 5. Handle packed matrix types inside arrays within structs. 6. Make sure that builtin arguments still retain their array qualifiers when used in leaf functions. 7. Fix declaration of array-of-array constants for Metal so we can use the array<T> template.
2019-09-05 12:39:44 -04:00
Hans-Kristian Arntzen
1dc7e938d0
Make sure not to propagate loads outside interlock region.
2019-09-04 12:33:20 +02:00