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
{{ message }}
This repository has been archived by the owner on Dec 31, 2020. It is now read-only.
I think this is some stupidity on the side of MSVC:
In each of the mismatching function types, MSVC used a type of class nv::Vector4 * const for nv::Vector[16].
The correct type for the parameter would be nv::Vector4 * (without const), as the "array of V4" decays to "pointer to V4". Why it adds a "const" to the pointer is unknown to me and violating the C++ standard, which states topmost cv-qualifiers have to be removed from the function signature.
Interestingly it does this only if the array element type is not cv-qualified (i.e. const Vector4[16] correctly decays to const Vector4 *). Thats the reason only the symbols in CompressorETC can not be found.
There are three possible workarounds/solutions:
redeclare the prototypes to decompress_etc(const void *, Vector4 *)
pass a pointer to the first array element, i.e. call decompress_etc(block, &colors[0])
use std::array<Vector4, 16>& as parameter
The last one is the only typesafe variant, as this actually encodes the array size in the function parameter list, nv::decompress_etc_eac(void const*, std::array<nv::Vector4, 16ul>&)
Sign up for freeto subscribe to this conversation on GitHub.
Already have an account?
Sign in.
I am unable to compile any configuration using Visual Studio 2012 because I get the following linker errors:
I have made no changes to any files.
I have attached the full build output.
nvtt build output.txt
The text was updated successfully, but these errors were encountered: