Closed GoogleCodeExporter closed 9 years ago
At first glance I don't see any problem with that code. Can you describe the
sequence of operations performed on that surface? Any chance of getting a stack
trace showing the crash location?
Original comment by cast...@gmail.com
on 9 Jul 2013 at 5:17
Here is our the call stack that our data compiler spits out.
09:51:05.58 [Context] While compiling: rendering/color_grading_identity.texture
09:51:05.58 [Crash] Access violation (0xc0000005) in build 13705
09:51:05.58 [Crash] accessing address 0000000005C20DC8 from
000000005A68C1BE
0x5a68c1be memcpy
0x8002b6b0 struct nvtt::Surface __cdecl nvtt::diff(struct nvtt::Surface const &
__ptr64,struct nvtt::Surface const & __ptr64,float)
0x01e51c90
0x0013e270
0x00000008
0x01e51a20
0x00000001
0x0013e138
0x0013e218
0x8000f4db public: void __cdecl nvtt::Surface::operator=(struct nvtt::Surface
const & __ptr64) __ptr64
0x01e5ae50
0x00000002
0x0013e220
0x80001283
0xfffffffe
I'll try to create the smallest possible reprocase and post it here (right now
all I have is real in-engine code).
Original comment by karl.zyl...@northplay.com
on 10 Jul 2013 at 7:52
Hello again. I have created a small reprocase:
////// CODE START
#include <nvtt/nvtt.h>
#include <fstream>
int main()
{
nvtt::CompressionOptions nvtt_compression;
nvtt_compression.setQuality(nvtt::Quality_Normal);
nvtt_compression.setFormat(nvtt::Format::Format_RGBA);
nvtt::InputFormat input_format = nvtt::InputFormat_BGRA_8UB;
nvtt::OutputOptions nvtt_output;
nvtt::Context nvtt_context;
nvtt_context.enableCudaAcceleration(false);
using namespace std;
ifstream::pos_type size;
char image[16512];
std::ifstream file ("color_grading_identity.dds", ios::in|ios::binary|ios::ate);
if (file.is_open())
{
size = file.tellg();
file.seekg (0, ios::beg);
file.read (image, size);
file.close();
}
nvtt::Surface surface, tmp_surface;
unsigned layers = 16;
nvtt::TextureType tt = nvtt::TextureType_3D;
nvtt_context.outputHeader(tt, 16, 16, layers, 0, false, nvtt_compression, nvtt_output);
surface.setImage(input_format, 16, 16, layers, image);
surface.setAlphaMode(nvtt::AlphaMode_Transparency);
surface.setWrapMode(nvtt::WrapMode_Mirror);
tmp_surface = surface;
tmp_surface.toGamma(2.2f);
return 0;
}
////// CODE END
The issue seems to be related to the assignment tmp_surface = surface (we do
that in our code inside a mipmap loop). It does not matter if I run
surface.toGamma(2.2f) or tmp_surface.toGamma(2.2f) on the last line, it still
crashes as long as the assignment of tmp_surface is present.
Original comment by karl.zyl...@northplay.com
on 10 Jul 2013 at 9:36
Hmm... on what platform are you seeing this problem? I just tried your example
on win32 and win64 and it worked fine in both cases. I'll give it a try on OSX
when I have some time.
Original comment by cast...@gmail.com
on 10 Jul 2013 at 5:37
I'm seeing it on Win32 and Win64. I'll poke around a bit with the code, maybe
there's some compiler setting that causes it to behave like this on only my
computer.
Original comment by karl.zyl...@northplay.com
on 11 Jul 2013 at 7:25
I wanted to try with a fresh copy of NVTT since our build system has a repo
which automatically pulls stuff from yours. My thought was that this might have
caused some kind of inconsistency, causing my crash. However; I can't get the
fresh copy to compile (in VS2010 or VS2010), the solution cmake spits out does
not build. nvtt can't link nvcore because nvcore can't compile, one of the
error messages it spits out is this:
2> Debug.cpp
2>c:\projects\nvidia-texture-tools\src\nvcore\StrLib.h(165): error C2487:
'separator' : member of dll interface class may not be declared with dll
interface
2>c:\projects\nvidia-texture-tools\src\nvcore\StrLib.h(166): error C2487:
'fileName' : member of dll interface class may not be declared with dll
interface
2>c:\projects\nvidia-texture-tools\src\nvcore\StrLib.h(167): error C2487:
'extension' : member of dll interface class may not be declared with dll
interface
2> StrLib.cpp
2>c:\projects\nvidia-texture-tools\src\nvcore\StrLib.h(165): error C2487:
'separator' : member of dll interface class may not be declared with dll
interface
2>c:\projects\nvidia-texture-tools\src\nvcore\StrLib.h(166): error C2487:
'fileName' : member of dll interface class may not be declared with dll
interface
2>c:\projects\nvidia-texture-tools\src\nvcore\StrLib.h(167): error C2487:
'extension' : member of dll interface class may not be declared with dll
interface
2> TextWriter.cpp
2>c:\projects\nvidia-texture-tools\src\nvcore\StrLib.h(165): error C2487:
'separator' : member of dll interface class may not be declared with dll
interface
2>c:\projects\nvidia-texture-tools\src\nvcore\StrLib.h(166): error C2487:
'fileName' : member of dll interface class may not be declared with dll
interface
2>c:\projects\nvidia-texture-tools\src\nvcore\StrLib.h(167): error C2487:
'extension' : member of dll interface class may not be declared with dll
interface
Tried to remove the dll export from the functions, but then I got a huge list
of linker errors. Feeling like I'm drifting away from my original bug report
here...
Original comment by karl.zyl...@northplay.com
on 11 Jul 2013 at 9:27
There's a vc10 solution in project/vc10, but it may not be up to date. I don't
usually use cmake on windows, so that build configuration may be broken. Let me
know if the vc10 solution works for you and otherwise I'll take a look at the
cmake problems.
Original comment by cast...@gmail.com
on 11 Jul 2013 at 6:42
The vc10 solution didn't work out of the box. I had to remove the missing file
CompressorDXT.cpp from the project and also add BlockCompressor.h/cpp in order
for it to build.
Once I had successfully built it my crash did not happen any more. Thank you
for your quick and helpful answers!
Original comment by karl.zyl...@northplay.com
on 12 Jul 2013 at 8:47
OK, I'll close the issue then!
Original comment by cast...@gmail.com
on 19 Jul 2013 at 11:49
Original issue reported on code.google.com by
karl.zyl...@northplay.com
on 9 Jul 2013 at 8:56Attachments: