Skip to content

Fix inability to pass user params of feedback proc #333

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions applications/_plugins/ccmp_encode/hpc/ccpu_hpc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ CMP_ERROR Plugin_CCPU_HPC::TC_GetDeviceInfo(void* pDeviceInfo)
}

// TODO: For the future, this can be simplified if srcTexture was passed by value instead of reference
CMP_ERROR Plugin_CCPU_HPC::TC_Compress(void* options, MipSet& srcTexture, MipSet& destTexture, CMP_Feedback_Proc pFeedback)
CMP_ERROR Plugin_CCPU_HPC::TC_Compress(void* options, MipSet& srcTexture, MipSet& destTexture, CMP_Feedback_Proc pFeedback, CMP_DWORD_PTR pUser1, CMP_DWORD_PTR pUser2)
{
CMP_ERROR result = CMP_OK;

Expand All @@ -124,7 +124,7 @@ CMP_ERROR Plugin_CCPU_HPC::TC_Compress(void* options, MipSet& srcTexture, MipSet
#endif

if (m_pComputeBase)
result = m_pComputeBase->Compress((KernelOptions*)options, srcTexture, destTexture, pFeedback);
result = m_pComputeBase->Compress((KernelOptions*)options, srcTexture, destTexture, pFeedback, pUser1, pUser2);

#ifdef ENABLE_MAKE_COMPATIBLE_API
if (tempBuffer.isBufferNew)
Expand Down
2 changes: 1 addition & 1 deletion applications/_plugins/ccmp_encode/hpc/ccpu_hpc.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class Plugin_CCPU_HPC : public PluginInterface_Pipeline
int TC_PluginGetVersion(TC_PluginVersion* pPluginVersion);
int TC_Init(void* kernel_options);
int TC_PluginSetSharedIO(void* Shared);
CMP_ERROR TC_Compress(void* kernel_options, MipSet& SrcTexture, MipSet& destTexture, CMP_Feedback_Proc pFeedback);
CMP_ERROR TC_Compress(void* kernel_options, MipSet& SrcTexture, MipSet& destTexture, CMP_Feedback_Proc pFeedback, CMP_DWORD_PTR pUser1, CMP_DWORD_PTR pUser2);
void TC_SetComputeOptions(void* options);
char* TC_ComputeSourceFile();
CMP_ERROR TC_GetPerformanceStats(void* pPerfStats);
Expand Down
4 changes: 2 additions & 2 deletions applications/_plugins/ccmp_encode/hpc/compute_cpu_hpc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -337,7 +337,7 @@ void CompressTexture(const texture_surface* input, unsigned char* output)
g_plugin_compute->CompressTexture((void*)input, (void*)output, nullptr);
}

CMP_ERROR CCPU_HPC::Compress(KernelOptions* Options, MipSet& SrcTexture, MipSet& destTexture, CMP_Feedback_Proc pFeedback)
CMP_ERROR CCPU_HPC::Compress(KernelOptions* Options, MipSet& SrcTexture, MipSet& destTexture, CMP_Feedback_Proc pFeedback, CMP_DWORD_PTR pUser1, CMP_DWORD_PTR pUser2)
{
if (m_plugin_compute == NULL)
return (CMP_ERR_UNABLE_TO_INIT_COMPUTELIB);
Expand Down Expand Up @@ -488,7 +488,7 @@ CMP_ERROR CCPU_HPC::Compress(KernelOptions* Options, MipSet& SrcTexture, MipSet&
if (progress_old != progress)
{
progress_old = progress;
if (pFeedback(progress * 100.0f, NULL, NULL))
if (pFeedback(progress * 100.0f, pUser1, pUser2))
{
break;
}
Expand Down
2 changes: 1 addition & 1 deletion applications/_plugins/ccmp_encode/hpc/compute_cpu_hpc.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ class CCPU_HPC : public ComputeBase
public:
CCPU_HPC(void* kerneloptions);
~CCPU_HPC();
CMP_ERROR Compress(KernelOptions* Options, MipSet& SrcTexture, MipSet& destTexture, CMP_Feedback_Proc pFeedback);
CMP_ERROR Compress(KernelOptions* Options, MipSet& SrcTexture, MipSet& destTexture, CMP_Feedback_Proc pFeedback, CMP_DWORD_PTR pUser1, CMP_DWORD_PTR pUser2);
void SetComputeOptions(ComputeOptions* CLOptions);
float GetProcessElapsedTimeMS();
float GetMTxPerSec();
Expand Down
2 changes: 1 addition & 1 deletion applications/_plugins/common/cmp_plugininterface.h
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ class PluginInterface_Pipeline : PluginBase
virtual int TC_PluginGetVersion(TC_PluginVersion* pPluginVersion) = 0;
virtual int TC_PluginSetSharedIO(void* Shared) = 0;
virtual int TC_Init(void* kernel_options) = 0;
virtual CMP_ERROR TC_Compress(void* kernel_options, MipSet& SrcTexture, MipSet& destTexture, CMP_Feedback_Proc pFeedbackProc = NULL) = 0;
virtual CMP_ERROR TC_Compress(void* kernel_options, MipSet& SrcTexture, MipSet& destTexture, CMP_Feedback_Proc pFeedbackProc = NULL, CMP_DWORD_PTR pUser1 = NULL, CMP_DWORD_PTR pUser2 = NULL) = 0;
virtual void TC_SetComputeOptions(void* options) = 0;
virtual char* TC_ComputeSourceFile() = 0;
virtual CMP_ERROR TC_GetPerformanceStats(void* pPerfStats) = 0;
Expand Down
8 changes: 5 additions & 3 deletions cmp_compressonatorlib/common/compress.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,15 @@
// TODO: This probably shouldn't be defined in compress.cpp
CMP_INT CMP_GetNumberOfProcessors();

CMP_ERROR CodecCompressTexture(const CMP_Texture* srcTexture, CMP_Texture* destTexture, const CMP_CompressOptions* options, CMP_Feedback_Proc feedbackProc);
CMP_ERROR CodecCompressTexture(const CMP_Texture* srcTexture, CMP_Texture* destTexture, const CMP_CompressOptions* options, CMP_Feedback_Proc feedbackProc, CMP_DWORD_PTR user1, CMP_DWORD_PTR user2);

CMP_ERROR CodecCompressTextureThreaded(const CMP_Texture* srcTexture,
CMP_Texture* destTexture,
const CMP_CompressOptions* options,
CMP_Feedback_Proc feedbackProc);
CMP_Feedback_Proc feedbackProc,
CMP_DWORD_PTR user1,
CMP_DWORD_PTR user2);

CMP_ERROR CodecDecompressTexture(const CMP_Texture* srcTexture, CMP_Texture* destTexture, const CMP_CompressOptions* options, CMP_Feedback_Proc feedbackProc);
CMP_ERROR CodecDecompressTexture(const CMP_Texture* srcTexture, CMP_Texture* destTexture, const CMP_CompressOptions* options, CMP_Feedback_Proc feedbackProc, CMP_DWORD_PTR user1, CMP_DWORD_PTR user2);

#endif // !COMPRESS_H
20 changes: 14 additions & 6 deletions cmp_compressonatorlib/compress.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ static void CMP_PrepareCMPSourceForIMG_Destination(CMP_Texture* destTexture, CMP

#endif

CMP_ERROR CodecCompressTexture(const CMP_Texture* srcTexture, CMP_Texture* destTexture, const CMP_CompressOptions* options, CMP_Feedback_Proc feedbackProc)
CMP_ERROR CodecCompressTexture(const CMP_Texture* srcTexture, CMP_Texture* destTexture, const CMP_CompressOptions* options, CMP_Feedback_Proc feedbackProc, CMP_DWORD_PTR user1, CMP_DWORD_PTR user2)
{
CodecType destType = GetCodecType(destTexture->format);
if (destType == CT_Unknown)
Expand Down Expand Up @@ -370,7 +370,7 @@ CMP_ERROR CodecCompressTexture(const CMP_Texture* srcTexture, CMP_Texture* destT
srcBuffer->m_bSwizzle = swizzleSrcBuffer;

DISABLE_FP_EXCEPTIONS;
CodecError err = codec->Compress(*srcBuffer, *destBuffer, feedbackProc);
CodecError err = codec->Compress(*srcBuffer, *destBuffer, feedbackProc, user1, user2);
RESTORE_FP_EXCEPTIONS;

destTexture->dwDataSize = destBuffer->GetDataSize();
Expand All @@ -382,7 +382,7 @@ CMP_ERROR CodecCompressTexture(const CMP_Texture* srcTexture, CMP_Texture* destT
return GetError(err);
}

CMP_ERROR CodecDecompressTexture(const CMP_Texture* srcTexture, CMP_Texture* destTexture, const CMP_CompressOptions* options, CMP_Feedback_Proc feedbackProc)
CMP_ERROR CodecDecompressTexture(const CMP_Texture* srcTexture, CMP_Texture* destTexture, const CMP_CompressOptions* options, CMP_Feedback_Proc feedbackProc, CMP_DWORD_PTR user1, CMP_DWORD_PTR user2)
{
CodecType srcType = GetCodecType(srcTexture->format);
if (srcType == CT_Unknown)
Expand Down Expand Up @@ -448,7 +448,7 @@ CMP_ERROR CodecDecompressTexture(const CMP_Texture* srcTexture, CMP_Texture* des
destBuffer->SetBlockDepth(destTexture->nBlockDepth);
destBuffer->SetFormat(destTexture->format);

CodecError err1 = codec->Decompress(*srcBuffer, *destBuffer, feedbackProc);
CodecError err1 = codec->Decompress(*srcBuffer, *destBuffer, feedbackProc, user1, user2);

RESTORE_FP_EXCEPTIONS;

Expand Down Expand Up @@ -477,6 +477,8 @@ class CATICompressThreadData
CCodecBuffer* m_pSrcBuffer;
CCodecBuffer* m_pDestBuffer;
CMP_Feedback_Proc m_pFeedbackProc;
CMP_DWORD_PTR m_pUser1;
CMP_DWORD_PTR m_pUser2;
CodecError m_errorCode;
};

Expand All @@ -485,6 +487,8 @@ CATICompressThreadData::CATICompressThreadData()
, m_pSrcBuffer(NULL)
, m_pDestBuffer(NULL)
, m_pFeedbackProc(NULL)
, m_pUser1(NULL)
, m_pUser2(NULL)
, m_errorCode(CE_OK)
{
}
Expand All @@ -500,15 +504,17 @@ void ThreadedCompressProc(void* lpParameter)
{
CATICompressThreadData* pThreadData = (CATICompressThreadData*)lpParameter;
DISABLE_FP_EXCEPTIONS;
CodecError err = pThreadData->m_pCodec->Compress(*pThreadData->m_pSrcBuffer, *pThreadData->m_pDestBuffer, pThreadData->m_pFeedbackProc);
CodecError err = pThreadData->m_pCodec->Compress(*pThreadData->m_pSrcBuffer, *pThreadData->m_pDestBuffer, pThreadData->m_pFeedbackProc, pThreadData->m_pUser1, pThreadData->m_pUser2);
RESTORE_FP_EXCEPTIONS;
pThreadData->m_errorCode = err;
}

CMP_ERROR CodecCompressTextureThreaded(const CMP_Texture* srcTexture,
CMP_Texture* destTexture,
const CMP_CompressOptions* options,
CMP_Feedback_Proc feedbackProc)
CMP_Feedback_Proc feedbackProc,
CMP_DWORD_PTR user1,
CMP_DWORD_PTR user2)
{
CodecType destType = GetCodecType(destTexture->format);
if (destType == CT_Unknown)
Expand Down Expand Up @@ -679,6 +685,8 @@ CMP_ERROR CodecCompressTextureThreaded(const CMP_Texture* srcTexture,

threadData.m_pSrcBuffer->m_bSwizzle = swizzleSrcBuffer;
threadData.m_pFeedbackProc = feedbackProc;
threadData.m_pUser1 = user1;
threadData.m_pUser2 = user2;

ahThread[dwThreadCount++] = std::thread(ThreadedCompressProc, &threadData);
}
Expand Down
20 changes: 11 additions & 9 deletions cmp_compressonatorlib/compressonator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,9 @@ static void CMP_PrepareSourceForCMP_Destination(CMP_Texture* pTexture, CMP_FORMA
CMP_ERROR CMP_API CMP_ConvertTexture(CMP_Texture* pSourceTexture,
CMP_Texture* pDestTexture,
const CMP_CompressOptions* pOptions,
CMP_Feedback_Proc pFeedbackProc)
CMP_Feedback_Proc pFeedbackProc,
CMP_DWORD_PTR pUser1,
CMP_DWORD_PTR pUser2)
{
#ifdef USE_DBGTRACE
DbgTrace(("-------> pSourceTexture [%x] pDestTexture [%x] pOptions [%x]", pSourceTexture, pDestTexture, pOptions));
Expand Down Expand Up @@ -397,17 +399,17 @@ CMP_ERROR CMP_API CMP_ConvertTexture(CMP_Texture* pSourceTexture,
#endif
)
{
return CodecCompressTextureThreaded(&srcTextureCopy, pDestTexture, pOptions, pFeedbackProc);
return CodecCompressTextureThreaded(&srcTextureCopy, pDestTexture, pOptions, pFeedbackProc, pUser1, pUser2);
}
else
#endif // THREADED_COMPRESS
{
return CodecCompressTexture(&srcTextureCopy, pDestTexture, pOptions, pFeedbackProc);
return CodecCompressTexture(&srcTextureCopy, pDestTexture, pOptions, pFeedbackProc, pUser1, pUser2);
}
}
else if (!compressing && decompressing) // Decompression
{
return CodecDecompressTexture(&srcTextureCopy, pDestTexture, pOptions, pFeedbackProc);
return CodecDecompressTexture(&srcTextureCopy, pDestTexture, pOptions, pFeedbackProc, pUser1, pUser2);
}
else // Decompressing & then compressing
{
Expand Down Expand Up @@ -458,18 +460,18 @@ CMP_ERROR CMP_API CMP_ConvertTexture(CMP_Texture* pSourceTexture,
}

DISABLE_FP_EXCEPTIONS;
CodecError err2 = pCodecIn->Decompress(*pSrcBuffer, *pTempBuffer, pFeedbackProc);
CodecError err2 = pCodecIn->Decompress(*pSrcBuffer, *pTempBuffer, pFeedbackProc, pUser1, pUser2);
if (err2 == CE_OK)
{
err2 = pCodecOut->Compress(*pTempBuffer, *pDestBuffer, pFeedbackProc);
err2 = pCodecOut->Compress(*pTempBuffer, *pDestBuffer, pFeedbackProc, pUser1, pUser2);
}
RESTORE_FP_EXCEPTIONS;

return GetError(err2);
}
}

CMP_ERROR CMP_API CMP_ConvertMipTexture(CMP_MipSet* p_MipSetIn, CMP_MipSet* p_MipSetOut, const CMP_CompressOptions* pOptions, CMP_Feedback_Proc pFeedbackProc)
CMP_ERROR CMP_API CMP_ConvertMipTexture(CMP_MipSet* p_MipSetIn, CMP_MipSet* p_MipSetOut, const CMP_CompressOptions* pOptions, CMP_Feedback_Proc pFeedbackProc, CMP_DWORD_PTR pUser1, CMP_DWORD_PTR pUser2)
{
assert(p_MipSetIn);
assert(p_MipSetOut);
Expand Down Expand Up @@ -577,7 +579,7 @@ CMP_ERROR CMP_API CMP_ConvertMipTexture(CMP_MipSet* p_MipSetIn, CMP_MipSet* p_Mi
//========================
// Process ConvertTexture
//========================
CMP_ERROR cmp_status = CMP_ConvertTexture(&srcTexture, &destTexture, pOptions, pFeedbackProc);
CMP_ERROR cmp_status = CMP_ConvertTexture(&srcTexture, &destTexture, pOptions, pFeedbackProc, pUser1, pUser2);
if (cmp_status != CMP_OK)
{
return cmp_status;
Expand Down Expand Up @@ -701,7 +703,7 @@ CMP_ERROR CMP_API CMP_ConvertMipTexture(CMP_MipSet* p_MipSetIn, CMP_MipSet* p_Mi
//========================
// Process ConvertTexture
//========================
CMP_ERROR cmp_status = CMP_ConvertTexture(&srcTexture, &destTexture, pOptions, pFeedbackProc);
CMP_ERROR cmp_status = CMP_ConvertTexture(&srcTexture, &destTexture, pOptions, pFeedbackProc, pUser1, pUser2);

if (cmp_status != CMP_OK)
{
Expand Down
10 changes: 6 additions & 4 deletions cmp_compressonatorlib/compressonator.h
Original file line number Diff line number Diff line change
Expand Up @@ -963,7 +963,9 @@ CMP_DWORD CMP_API CMP_CalculateBufferSize(const CMP_Texture* pTexture);
CMP_ERROR CMP_API CMP_ConvertTexture(CMP_Texture* pSourceTexture,
CMP_Texture* pDestTexture,
const CMP_CompressOptions* pOptions,
CMP_Feedback_Proc pFeedbackProc);
CMP_Feedback_Proc pFeedbackProc,
CMP_DWORD_PTR pUser1,
CMP_DWORD_PTR pUser2);

#ifdef __cplusplus
};
Expand Down Expand Up @@ -1047,15 +1049,15 @@ CMP_ERROR CMP_API CMP_MipSetAnlaysis(CMP_MipSet* src1, CMP_MipSet* src2, CMP_INT
typedef bool(CMP_API* CMP_MIPFeedback_Proc)(CMP_MIPPROGRESSPARAM mipProgress);

// Converts the source texture to the destination texture using MipSets with MIP MAP Levels
CMP_ERROR CMP_API CMP_ConvertMipTexture(CMP_MipSet* p_MipSetIn, CMP_MipSet* p_MipSetOut, const CMP_CompressOptions* pOptions, CMP_Feedback_Proc pFeedbackProc);
CMP_ERROR CMP_API CMP_ConvertMipTexture(CMP_MipSet* p_MipSetIn, CMP_MipSet* p_MipSetOut, const CMP_CompressOptions* pOptions, CMP_Feedback_Proc pFeedbackProc, CMP_DWORD_PTR pUser1, CMP_DWORD_PTR pUser2);

//--------------------------------------------
// CMP_Framework Lib: Texture Encoder Interfaces
//--------------------------------------------
CMP_ERROR CMP_API CMP_LoadTexture(const char* sourceFile, CMP_MipSet* pMipSet);
CMP_ERROR CMP_API CMP_SaveTexture(const char* destFile, CMP_MipSet* pMipSet);
CMP_ERROR CMP_API CMP_ProcessTexture(CMP_MipSet* srcMipSet, CMP_MipSet* dstMipSet, KernelOptions kernelOptions, CMP_Feedback_Proc pFeedbackProc);
CMP_ERROR CMP_API CMP_CompressTexture(KernelOptions* options, CMP_MipSet srcMipSet, CMP_MipSet dstMipSet, CMP_Feedback_Proc pFeedback);
CMP_ERROR CMP_API CMP_ProcessTexture(CMP_MipSet* srcMipSet, CMP_MipSet* dstMipSet, KernelOptions kernelOptions, CMP_Feedback_Proc pFeedbackProc, CMP_DWORD_PTR pUser1, CMP_DWORD_PTR pUser2);
CMP_ERROR CMP_API CMP_CompressTexture(KernelOptions* options, CMP_MipSet srcMipSet, CMP_MipSet dstMipSet, CMP_Feedback_Proc pFeedback, CMP_DWORD_PTR pUser1, CMP_DWORD_PTR pUser2);
CMP_VOID CMP_API CMP_Format2FourCC(CMP_FORMAT format, CMP_MipSet* pMipSet);
CMP_FORMAT CMP_API CMP_ParseFormat(char* pFormat);
CMP_INT CMP_API CMP_NumberOfProcessors();
Expand Down
8 changes: 4 additions & 4 deletions cmp_framework/compute_base.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -385,13 +385,13 @@ CMP_ERROR CMP_API CMP_GetDeviceInfo(KernelDeviceInfo* pDeviceInfo)
return CMP_OK;
}

CMP_ERROR CMP_API CMP_CompressTexture(KernelOptions* options, CMP_MipSet srcMipSet, CMP_MipSet dstMipSet, CMP_Feedback_Proc pFeedback)
CMP_ERROR CMP_API CMP_CompressTexture(KernelOptions* options, CMP_MipSet srcMipSet, CMP_MipSet dstMipSet, CMP_Feedback_Proc pFeedback, CMP_DWORD_PTR pUser1, CMP_DWORD_PTR pUser2)
{
CMP_ERROR result;

if (g_ComputeBase)
{
result = g_ComputeBase->TC_Compress(options, srcMipSet, dstMipSet, pFeedback);
result = g_ComputeBase->TC_Compress(options, srcMipSet, dstMipSet, pFeedback, pUser1, pUser2);
if (result != CMP_OK)
return (result);
}
Expand Down Expand Up @@ -419,7 +419,7 @@ CMP_ERROR CMP_API CMP_SetComputeOptions(ComputeOptions* options)
//===========================================================================================================
std::mutex cmp_mutex;

CMP_ERROR CMP_API CMP_ProcessTexture(CMP_MipSet* srcMipSet, CMP_MipSet* dstMipSet, KernelOptions kernelOptions, CMP_Feedback_Proc pFeedbackProc)
CMP_ERROR CMP_API CMP_ProcessTexture(CMP_MipSet* srcMipSet, CMP_MipSet* dstMipSet, KernelOptions kernelOptions, CMP_Feedback_Proc pFeedbackProc, CMP_DWORD_PTR pUser1, CMP_DWORD_PTR pUser2)
{
cmp_mutex.lock();

Expand Down Expand Up @@ -550,7 +550,7 @@ CMP_ERROR CMP_API CMP_ProcessTexture(CMP_MipSet* srcMipSet, CMP_MipSet* dstMipSe
}

// Do the compression
if (CMP_CompressTexture(&kernelOptions, *srcMipSet, *dstMipSet, pFeedbackProc) != CMP_OK)
if (CMP_CompressTexture(&kernelOptions, *srcMipSet, *dstMipSet, pFeedbackProc, pUser1, pUser2) != CMP_OK)
{
CMips.FreeMipSet(dstMipSet);
CMP_DestroyComputeLibrary(true);
Expand Down
2 changes: 1 addition & 1 deletion cmp_framework/compute_base.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ class ComputeBase : public RenderWindow
ComputeBase(){};
virtual ~ComputeBase(){};

virtual CMP_ERROR Compress(KernelOptions* Options, MipSet& SrcTexture, MipSet& destTexture, CMP_Feedback_Proc pFeedback) = 0;
virtual CMP_ERROR Compress(KernelOptions* Options, MipSet& SrcTexture, MipSet& destTexture, CMP_Feedback_Proc pFeedback, CMP_DWORD_PTR pUser1, CMP_DWORD_PTR pUser2) = 0;
virtual void SetComputeOptions(ComputeOptions* options) = 0;
virtual float GetProcessElapsedTimeMS() = 0;
virtual float GetMTxPerSec() = 0;
Expand Down