Some progress on the CUDA compressors.

This commit is contained in:
castano
2009-11-05 09:27:03 +00:00
parent 8e436b1d30
commit 0e5a1877a8
2 changed files with 95 additions and 95 deletions

View File

@ -90,12 +90,12 @@ static void convertToBlockLinear(const Image * image, uint * blockLinearImage)
#endif #endif
CudaContext::CudaContext() : CudaContext::CudaContext() :
bitmapTable(NULL), bitmapTable(NULL),
bitmapTableCTX(NULL), bitmapTableCTX(NULL),
data(NULL), data(NULL),
result(NULL) result(NULL)
{ {
#if defined HAVE_CUDA #if defined HAVE_CUDA
// Allocate and upload bitmaps. // Allocate and upload bitmaps.
cudaMalloc((void**) &bitmapTable, 992 * sizeof(uint)); cudaMalloc((void**) &bitmapTable, 992 * sizeof(uint));
@ -114,10 +114,10 @@ CudaContext::CudaContext() :
cudaMalloc((void**) &data, MAX_BLOCKS * 64U); cudaMalloc((void**) &data, MAX_BLOCKS * 64U);
cudaMalloc((void**) &result, MAX_BLOCKS * 8U); cudaMalloc((void**) &result, MAX_BLOCKS * 8U);
#endif #endif
} }
CudaContext::~CudaContext() CudaContext::~CudaContext()
{ {
#if defined HAVE_CUDA #if defined HAVE_CUDA
// Free device mem allocations. // Free device mem allocations.
cudaFree(bitmapTableCTX); cudaFree(bitmapTableCTX);
@ -125,7 +125,7 @@ CudaContext::~CudaContext()
cudaFree(data); cudaFree(data);
cudaFree(result); cudaFree(result);
#endif #endif
} }
bool CudaContext::isValid() const bool CudaContext::isValid() const
{ {

View File

@ -1,57 +1,57 @@
// Copyright NVIDIA Corporation 2007 -- Ignacio Castano <icastano@nvidia.com> // Copyright NVIDIA Corporation 2007 -- Ignacio Castano <icastano@nvidia.com>
// //
// Permission is hereby granted, free of charge, to any person // Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation // obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without // files (the "Software"), to deal in the Software without
// restriction, including without limitation the rights to use, // restriction, including without limitation the rights to use,
// copy, modify, merge, publish, distribute, sublicense, and/or sell // copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the // copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following // Software is furnished to do so, subject to the following
// conditions: // conditions:
// //
// The above copyright notice and this permission notice shall be // The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software. // included in all copies or substantial portions of the Software.
// //
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE. // OTHER DEALINGS IN THE SOFTWARE.
#ifndef NV_TT_CUDACOMPRESSDXT_H #ifndef NV_TT_CUDACOMPRESSDXT_H
#define NV_TT_CUDACOMPRESSDXT_H #define NV_TT_CUDACOMPRESSDXT_H
#include <nvimage/nvimage.h> #include <nvimage/nvimage.h>
#include <nvtt/nvtt.h> #include <nvtt/nvtt.h>
#include "nvtt/CompressDXT.h" #include "nvtt/CompressDXT.h"
struct cudaArray; struct cudaArray;
namespace nv namespace nv
{ {
class Image; class Image;
class CudaContext class CudaContext
{ {
public: public:
CudaContext(); CudaContext();
~CudaContext(); ~CudaContext();
bool isValid() const; bool isValid() const;
public: public:
// Device pointers. // Device pointers.
uint * bitmapTable; uint * bitmapTable;
uint * bitmapTableCTX; uint * bitmapTableCTX;
uint * data; uint * data;
uint * result; uint * result;
}; };
struct CudaCompressor : public CompressorInterface struct CudaCompressor : public CompressorInterface
{ {
CudaCompressor(CudaContext & ctx); CudaCompressor(CudaContext & ctx);
@ -65,49 +65,49 @@ namespace nv
protected: protected:
CudaContext & m_ctx; CudaContext & m_ctx;
}; };
struct CudaCompressorDXT1 : public CudaCompressor struct CudaCompressorDXT1 : public CudaCompressor
{ {
CudaCompressorDXT1(CudaContext & ctx) : CudaCompressor(ctx) {} CudaCompressorDXT1(CudaContext & ctx) : CudaCompressor(ctx) {}
virtual void setup(cudaArray * image, const nvtt::CompressionOptions::Private & compressionOptions); virtual void setup(cudaArray * image, const nvtt::CompressionOptions::Private & compressionOptions);
virtual void compressBlocks(uint first, uint count, uint w, uint h, nvtt::AlphaMode alphaMode, const nvtt::CompressionOptions::Private & compressionOptions, void * output); virtual void compressBlocks(uint first, uint count, uint w, uint h, nvtt::AlphaMode alphaMode, const nvtt::CompressionOptions::Private & compressionOptions, void * output);
virtual uint blockSize() const { return 8; }; virtual uint blockSize() const { return 8; };
}; };
/*struct CudaCompressorDXT1n : public CudaCompressor /*struct CudaCompressorDXT1n : public CudaCompressor
{ {
virtual void setup(const CompressionOptions::Private & compressionOptions); virtual void setup(const CompressionOptions::Private & compressionOptions);
virtual void compressBlocks(uint blockCount, const void * input, nvtt::AlphaMode alphaMode, const nvtt::CompressionOptions::Private & compressionOptions, void * output) = 0; virtual void compressBlocks(uint blockCount, const void * input, nvtt::AlphaMode alphaMode, const nvtt::CompressionOptions::Private & compressionOptions, void * output) = 0;
virtual uint blockSize() const { return 8; }; virtual uint blockSize() const { return 8; };
};*/ };*/
struct CudaCompressorDXT3 : public CudaCompressor struct CudaCompressorDXT3 : public CudaCompressor
{ {
CudaCompressorDXT3(CudaContext & ctx) : CudaCompressor(ctx) {} CudaCompressorDXT3(CudaContext & ctx) : CudaCompressor(ctx) {}
virtual void setup(cudaArray * image, const nvtt::CompressionOptions::Private & compressionOptions); virtual void setup(cudaArray * image, const nvtt::CompressionOptions::Private & compressionOptions);
virtual void compressBlocks(uint first, uint count, uint w, uint h, nvtt::AlphaMode alphaMode, const nvtt::CompressionOptions::Private & compressionOptions, void * output); virtual void compressBlocks(uint first, uint count, uint w, uint h, nvtt::AlphaMode alphaMode, const nvtt::CompressionOptions::Private & compressionOptions, void * output);
virtual uint blockSize() const { return 16; }; virtual uint blockSize() const { return 16; };
}; };
struct CudaCompressorDXT5 : public CudaCompressor struct CudaCompressorDXT5 : public CudaCompressor
{ {
CudaCompressorDXT5(CudaContext & ctx) : CudaCompressor(ctx) {} CudaCompressorDXT5(CudaContext & ctx) : CudaCompressor(ctx) {}
virtual void setup(cudaArray * image, const nvtt::CompressionOptions::Private & compressionOptions); virtual void setup(cudaArray * image, const nvtt::CompressionOptions::Private & compressionOptions);
virtual void compressBlocks(uint first, uint count, uint w, uint h, nvtt::AlphaMode alphaMode, const nvtt::CompressionOptions::Private & compressionOptions, void * output); virtual void compressBlocks(uint first, uint count, uint w, uint h, nvtt::AlphaMode alphaMode, const nvtt::CompressionOptions::Private & compressionOptions, void * output);
virtual uint blockSize() const { return 16; }; virtual uint blockSize() const { return 16; };
}; };
/*struct CudaCompressorCXT1 : public CudaCompressor /*struct CudaCompressorCXT1 : public CudaCompressor
{ {
virtual void setup(const CompressionOptions::Private & compressionOptions); virtual void setup(const CompressionOptions::Private & compressionOptions);
virtual void compressBlocks(uint blockCount, const void * input, nvtt::AlphaMode alphaMode, const nvtt::CompressionOptions::Private & compressionOptions, void * output) = 0; virtual void compressBlocks(uint blockCount, const void * input, nvtt::AlphaMode alphaMode, const nvtt::CompressionOptions::Private & compressionOptions, void * output) = 0;
virtual uint blockSize() const { return 8; }; virtual uint blockSize() const { return 8; };
};*/ };*/
} // nv namespace } // nv namespace
#endif // NV_TT_CUDAUTILS_H #endif // NV_TT_CUDAUTILS_H