You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
OpCopyObject is meant to be largely usable anywhere with any object. It is essentially a value copy. It does not allow other validation rules to be side-stepped (e.g. image and sampler in same block as the OpSampledImage instruction). As an example, the SPIRV-Tools optimizer uses it when performing some peep hole optimizations to avoid updating def/use information.
OpCopyLogical is a variant of OpCopyObject specifically specifically designed to handle similar, but not identical aggregates (array or structure). It is especially useful in Vulkan SPIR-V when changing between two versions of the same aggregate that differ only in layout decorations. For example, when DXC loads an aggregate from a resource it will have layout decorations. It then copies it to a version without layout decorations. OpCopyLogical reduces the number of instructions necessary to perform this transform.
OpCopyMemory is actually a variant of memcpy from C. Instead of specifying a size in bytes (as in OpCopyMemorySized) though, the whole object is copied (via the pointee type). This operation operates directly on memory. It could be lowered to a series of OpLoad and OpStore instructions. Vulkan traditionally uses OpCopyMemory because it uses logical pointers.
OpCopyObject
/OpCopyLogical
/OpCopyMemory
How are they used, can they be used anywhere, etc
The text was updated successfully, but these errors were encountered: