mirror of
https://github.com/opencv/opencv.git
synced 2024-11-25 11:40:44 +08:00
ocl: define ProgramSource before program
no changes in code
This commit is contained in:
parent
2c1b4f5711
commit
04b4495493
@ -2489,6 +2489,130 @@ size_t Kernel::localMemSize() const
|
||||
sizeof(val), &val, &retsz) == CL_SUCCESS ? (size_t)val : 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////// ProgramSource ///////////////////////////////////////////////
|
||||
|
||||
struct ProgramSource::Impl
|
||||
{
|
||||
Impl(const String& src)
|
||||
{
|
||||
init(cv::String(), cv::String(), src, cv::String());
|
||||
}
|
||||
Impl(const String& module, const String& name, const String& codeStr, const String& codeHash)
|
||||
{
|
||||
init(module, name, codeStr, codeHash);
|
||||
}
|
||||
void init(const String& module, const String& name, const String& codeStr, const String& codeHash)
|
||||
{
|
||||
refcount = 1;
|
||||
module_ = module;
|
||||
name_ = name;
|
||||
codeStr_ = codeStr;
|
||||
codeHash_ = codeHash;
|
||||
|
||||
isHashUpdated = false;
|
||||
if (codeHash_.empty())
|
||||
{
|
||||
updateHash();
|
||||
codeHash_ = cv::format("%08llx", hash_);
|
||||
}
|
||||
}
|
||||
|
||||
void updateHash()
|
||||
{
|
||||
hash_ = crc64((uchar*)codeStr_.c_str(), codeStr_.size());
|
||||
isHashUpdated = true;
|
||||
}
|
||||
|
||||
IMPLEMENT_REFCOUNTABLE();
|
||||
|
||||
String module_;
|
||||
String name_;
|
||||
String codeStr_;
|
||||
String codeHash_;
|
||||
// TODO std::vector<ProgramSource> includes_;
|
||||
|
||||
bool isHashUpdated;
|
||||
ProgramSource::hash_t hash_;
|
||||
};
|
||||
|
||||
|
||||
ProgramSource::ProgramSource()
|
||||
{
|
||||
p = 0;
|
||||
}
|
||||
|
||||
ProgramSource::ProgramSource(const String& module, const String& name, const String& codeStr, const String& codeHash)
|
||||
{
|
||||
p = new Impl(module, name, codeStr, codeHash);
|
||||
}
|
||||
|
||||
ProgramSource::ProgramSource(const char* prog)
|
||||
{
|
||||
p = new Impl(prog);
|
||||
}
|
||||
|
||||
ProgramSource::ProgramSource(const String& prog)
|
||||
{
|
||||
p = new Impl(prog);
|
||||
}
|
||||
|
||||
ProgramSource::~ProgramSource()
|
||||
{
|
||||
if(p)
|
||||
p->release();
|
||||
}
|
||||
|
||||
ProgramSource::ProgramSource(const ProgramSource& prog)
|
||||
{
|
||||
p = prog.p;
|
||||
if(p)
|
||||
p->addref();
|
||||
}
|
||||
|
||||
ProgramSource& ProgramSource::operator = (const ProgramSource& prog)
|
||||
{
|
||||
Impl* newp = (Impl*)prog.p;
|
||||
if(newp)
|
||||
newp->addref();
|
||||
if(p)
|
||||
p->release();
|
||||
p = newp;
|
||||
return *this;
|
||||
}
|
||||
|
||||
const String& ProgramSource::source() const
|
||||
{
|
||||
CV_Assert(p);
|
||||
return p->codeStr_;
|
||||
}
|
||||
|
||||
ProgramSource::hash_t ProgramSource::hash() const
|
||||
{
|
||||
CV_Assert(p);
|
||||
if (!p->isHashUpdated)
|
||||
p->updateHash();
|
||||
return p->hash_;
|
||||
}
|
||||
|
||||
|
||||
internal::ProgramEntry::operator ProgramSource&() const
|
||||
{
|
||||
if (this->pProgramSource == NULL)
|
||||
{
|
||||
cv::AutoLock lock(cv::getInitializationMutex());
|
||||
if (this->pProgramSource == NULL)
|
||||
{
|
||||
ProgramSource* ps = new ProgramSource(this->module, this->name, this->programCode, this->programHash);
|
||||
const_cast<ProgramEntry*>(this)->pProgramSource = ps;
|
||||
}
|
||||
}
|
||||
return *this->pProgramSource;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////// Program /////////////////////////////////////////////
|
||||
|
||||
struct Program::Impl
|
||||
@ -2717,125 +2841,6 @@ String Program::getPrefix(const String& buildflags)
|
||||
dev.name().c_str(), dev.driverVersion().c_str(), buildflags.c_str());
|
||||
}
|
||||
|
||||
///////////////////////////////////////// ProgramSource ///////////////////////////////////////////////
|
||||
|
||||
struct ProgramSource::Impl
|
||||
{
|
||||
Impl(const String& src)
|
||||
{
|
||||
init(cv::String(), cv::String(), src, cv::String());
|
||||
}
|
||||
Impl(const String& module, const String& name, const String& codeStr, const String& codeHash)
|
||||
{
|
||||
init(module, name, codeStr, codeHash);
|
||||
}
|
||||
void init(const String& module, const String& name, const String& codeStr, const String& codeHash)
|
||||
{
|
||||
refcount = 1;
|
||||
module_ = module;
|
||||
name_ = name;
|
||||
codeStr_ = codeStr;
|
||||
codeHash_ = codeHash;
|
||||
|
||||
isHashUpdated = false;
|
||||
if (codeHash_.empty())
|
||||
{
|
||||
updateHash();
|
||||
codeHash_ = cv::format("%08llx", hash_);
|
||||
}
|
||||
}
|
||||
|
||||
void updateHash()
|
||||
{
|
||||
hash_ = crc64((uchar*)codeStr_.c_str(), codeStr_.size());
|
||||
isHashUpdated = true;
|
||||
}
|
||||
|
||||
IMPLEMENT_REFCOUNTABLE();
|
||||
|
||||
String module_;
|
||||
String name_;
|
||||
String codeStr_;
|
||||
String codeHash_;
|
||||
// TODO std::vector<ProgramSource> includes_;
|
||||
|
||||
bool isHashUpdated;
|
||||
ProgramSource::hash_t hash_;
|
||||
};
|
||||
|
||||
|
||||
ProgramSource::ProgramSource()
|
||||
{
|
||||
p = 0;
|
||||
}
|
||||
|
||||
ProgramSource::ProgramSource(const String& module, const String& name, const String& codeStr, const String& codeHash)
|
||||
{
|
||||
p = new Impl(module, name, codeStr, codeHash);
|
||||
}
|
||||
|
||||
ProgramSource::ProgramSource(const char* prog)
|
||||
{
|
||||
p = new Impl(prog);
|
||||
}
|
||||
|
||||
ProgramSource::ProgramSource(const String& prog)
|
||||
{
|
||||
p = new Impl(prog);
|
||||
}
|
||||
|
||||
ProgramSource::~ProgramSource()
|
||||
{
|
||||
if(p)
|
||||
p->release();
|
||||
}
|
||||
|
||||
ProgramSource::ProgramSource(const ProgramSource& prog)
|
||||
{
|
||||
p = prog.p;
|
||||
if(p)
|
||||
p->addref();
|
||||
}
|
||||
|
||||
ProgramSource& ProgramSource::operator = (const ProgramSource& prog)
|
||||
{
|
||||
Impl* newp = (Impl*)prog.p;
|
||||
if(newp)
|
||||
newp->addref();
|
||||
if(p)
|
||||
p->release();
|
||||
p = newp;
|
||||
return *this;
|
||||
}
|
||||
|
||||
const String& ProgramSource::source() const
|
||||
{
|
||||
CV_Assert(p);
|
||||
return p->codeStr_;
|
||||
}
|
||||
|
||||
ProgramSource::hash_t ProgramSource::hash() const
|
||||
{
|
||||
CV_Assert(p);
|
||||
if (!p->isHashUpdated)
|
||||
p->updateHash();
|
||||
return p->hash_;
|
||||
}
|
||||
|
||||
|
||||
internal::ProgramEntry::operator ProgramSource&() const
|
||||
{
|
||||
if (this->pProgramSource == NULL)
|
||||
{
|
||||
cv::AutoLock lock(cv::getInitializationMutex());
|
||||
if (this->pProgramSource == NULL)
|
||||
{
|
||||
ProgramSource* ps = new ProgramSource(this->module, this->name, this->programCode, this->programHash);
|
||||
const_cast<ProgramEntry*>(this)->pProgramSource = ps;
|
||||
}
|
||||
}
|
||||
return *this->pProgramSource;
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////// OpenCLAllocator //////////////////////////////////////////////////
|
||||
|
Loading…
Reference in New Issue
Block a user