From 8a24a93e2f08d1cf2e0f2d893f049dcd4eaa3189 Mon Sep 17 00:00:00 2001 From: castano Date: Thu, 28 Feb 2008 16:06:27 +0000 Subject: [PATCH] Disable CUDA when memory allocations fail. --- src/nvtt/Compressor.cpp | 12 ++++++++++++ src/nvtt/cuda/CudaCompressDXT.cpp | 5 ++++- src/nvtt/cuda/CudaCompressDXT.h | 2 ++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/nvtt/Compressor.cpp b/src/nvtt/Compressor.cpp index ae306e1..003b737 100644 --- a/src/nvtt/Compressor.cpp +++ b/src/nvtt/Compressor.cpp @@ -215,6 +215,12 @@ Compressor::Compressor() : m(*new Compressor::Private()) if (m.cudaEnabled) { m.cuda = new CudaCompressor(); + + if (!m.cuda->isValid()) + { + m.cudaEnabled = false; + m.cuda = NULL; + } } } @@ -235,6 +241,12 @@ void Compressor::enableCudaAcceleration(bool enable) if (m.cudaEnabled && m.cuda == NULL) { m.cuda = new CudaCompressor(); + + if (!m.cuda->isValid()) + { + m.cudaEnabled = false; + m.cuda = NULL; + } } } diff --git a/src/nvtt/cuda/CudaCompressDXT.cpp b/src/nvtt/cuda/CudaCompressDXT.cpp index 9bec467..6ee3ff5 100644 --- a/src/nvtt/cuda/CudaCompressDXT.cpp +++ b/src/nvtt/cuda/CudaCompressDXT.cpp @@ -107,7 +107,10 @@ CudaCompressor::~CudaCompressor() #endif } - +bool CudaCompressor::isValid() const +{ + return m_data != NULL && m_result != NULL && m_bitmapTable != NULL; +} // @@ This code is very repetitive and needs to be cleaned up. diff --git a/src/nvtt/cuda/CudaCompressDXT.h b/src/nvtt/cuda/CudaCompressDXT.h index 451072e..2d1691d 100644 --- a/src/nvtt/cuda/CudaCompressDXT.h +++ b/src/nvtt/cuda/CudaCompressDXT.h @@ -37,6 +37,8 @@ namespace nv CudaCompressor(); ~CudaCompressor(); + bool isValid() const; + void compressDXT1(const Image * image, const nvtt::OutputOptions::Private & outputOptions, const nvtt::CompressionOptions::Private & compressionOptions); void compressDXT3(const Image * image, const nvtt::OutputOptions::Private & outputOptions, const nvtt::CompressionOptions::Private & compressionOptions); void compressDXT5(const Image * image, const nvtt::OutputOptions::Private & outputOptions, const nvtt::CompressionOptions::Private & compressionOptions);