|
|
|
@ -98,17 +98,19 @@ public: |
|
|
|
|
|
|
|
|
|
m_pD3D11Ctx->RSSetViewports(1, &viewport); |
|
|
|
|
|
|
|
|
|
D3D11_TEXTURE2D_DESC desc = { 0 }; |
|
|
|
|
|
|
|
|
|
desc.Width = m_width; |
|
|
|
|
desc.Height = m_height; |
|
|
|
|
desc.MipLevels = 1; |
|
|
|
|
desc.ArraySize = 1; |
|
|
|
|
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; |
|
|
|
|
desc.SampleDesc.Count = 1; |
|
|
|
|
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; |
|
|
|
|
desc.Usage = D3D11_USAGE_DYNAMIC; |
|
|
|
|
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; |
|
|
|
|
D3D11_TEXTURE2D_DESC desc; |
|
|
|
|
|
|
|
|
|
desc.Width = m_width; |
|
|
|
|
desc.Height = m_height; |
|
|
|
|
desc.MipLevels = 1; |
|
|
|
|
desc.ArraySize = 1; |
|
|
|
|
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; |
|
|
|
|
desc.SampleDesc.Count = 1; |
|
|
|
|
desc.SampleDesc.Quality = 0; |
|
|
|
|
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; |
|
|
|
|
desc.Usage = D3D11_USAGE_DYNAMIC; |
|
|
|
|
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; |
|
|
|
|
desc.MiscFlags = 0; |
|
|
|
|
|
|
|
|
|
r = m_pD3D11Dev->CreateTexture2D(&desc, NULL, &m_pSurface); |
|
|
|
|
if (FAILED(r)) |
|
|
|
@ -170,7 +172,7 @@ public: |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
HRESULT r; |
|
|
|
|
ID3D11Texture2D* pSurface; |
|
|
|
|
ID3D11Texture2D* pSurface = 0; |
|
|
|
|
|
|
|
|
|
r = get_surface(&pSurface); |
|
|
|
|
if (FAILED(r)) |
|
|
|
@ -178,6 +180,8 @@ public: |
|
|
|
|
throw std::runtime_error("get_surface() failed!"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
m_timer.start(); |
|
|
|
|
|
|
|
|
|
switch (m_mode) |
|
|
|
|
{ |
|
|
|
|
case MODE_CPU: |
|
|
|
@ -186,7 +190,7 @@ public: |
|
|
|
|
UINT subResource = ::D3D11CalcSubresource(0, 0, 1); |
|
|
|
|
|
|
|
|
|
D3D11_MAPPED_SUBRESOURCE mappedTex; |
|
|
|
|
r = m_pD3D11Ctx->Map(m_pSurface, subResource, D3D11_MAP_WRITE_DISCARD, 0, &mappedTex); |
|
|
|
|
r = m_pD3D11Ctx->Map(pSurface, subResource, D3D11_MAP_WRITE_DISCARD, 0, &mappedTex); |
|
|
|
|
if (FAILED(r)) |
|
|
|
|
{ |
|
|
|
|
throw std::runtime_error("surface mapping failed!"); |
|
|
|
@ -200,7 +204,17 @@ public: |
|
|
|
|
cv::blur(m, m, cv::Size(15, 15), cv::Point(-7, -7)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
m_pD3D11Ctx->Unmap(m_pSurface, subResource); |
|
|
|
|
cv::String strMode = cv::format("%s", m_modeStr[MODE_CPU].c_str()); |
|
|
|
|
cv::String strProcessing = m_demo_processing ? "blur frame" : "copy frame"; |
|
|
|
|
cv::String strFPS = cv::format("%2.1f", m_timer.fps()); |
|
|
|
|
cv::String strDevName = cv::format("%s", m_oclDevName.c_str()); |
|
|
|
|
|
|
|
|
|
cv::putText(m, strMode, cv::Point(0, 16), 1, 0.8, cv::Scalar(0, 0, 0)); |
|
|
|
|
cv::putText(m, strProcessing, cv::Point(0, 32), 1, 0.8, cv::Scalar(0, 0, 0)); |
|
|
|
|
cv::putText(m, strFPS, cv::Point(0, 48), 1, 0.8, cv::Scalar(0, 0, 0)); |
|
|
|
|
cv::putText(m, strDevName, cv::Point(0, 64), 1, 0.8, cv::Scalar(0, 0, 0)); |
|
|
|
|
|
|
|
|
|
m_pD3D11Ctx->Unmap(pSurface, subResource); |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
@ -218,6 +232,16 @@ public: |
|
|
|
|
cv::blur(u, u, cv::Size(15, 15), cv::Point(-7, -7)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
cv::String strMode = cv::format("%s", m_modeStr[MODE_GPU].c_str()); |
|
|
|
|
cv::String strProcessing = m_demo_processing ? "blur frame" : "copy frame"; |
|
|
|
|
cv::String strFPS = cv::format("%2.1f", m_timer.fps()); |
|
|
|
|
cv::String strDevName = cv::format("%s", m_oclDevName.c_str()); |
|
|
|
|
|
|
|
|
|
cv::putText(u, strMode, cv::Point(0, 16), 1, 0.8, cv::Scalar(0, 0, 0)); |
|
|
|
|
cv::putText(u, strProcessing, cv::Point(0, 32), 1, 0.8, cv::Scalar(0, 0, 0)); |
|
|
|
|
cv::putText(u, strFPS, cv::Point(0, 48), 1, 0.8, cv::Scalar(0, 0, 0)); |
|
|
|
|
cv::putText(u, strDevName, cv::Point(0, 64), 1, 0.8, cv::Scalar(0, 0, 0)); |
|
|
|
|
|
|
|
|
|
cv::directx::convertToD3D11Texture2D(u, pSurface); |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
@ -225,7 +249,7 @@ public: |
|
|
|
|
|
|
|
|
|
} // switch
|
|
|
|
|
|
|
|
|
|
print_info(pSurface, m_mode, getFps(), m_oclDevName); |
|
|
|
|
m_timer.stop(); |
|
|
|
|
|
|
|
|
|
// traditional DX render pipeline:
|
|
|
|
|
// BitBlt surface to backBuffer and flip backBuffer to frontBuffer
|
|
|
|
@ -256,37 +280,6 @@ public: |
|
|
|
|
} // render()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void print_info(ID3D11Texture2D* pSurface, int mode, float fps, cv::String oclDevName) |
|
|
|
|
{ |
|
|
|
|
HRESULT r; |
|
|
|
|
|
|
|
|
|
UINT subResource = ::D3D11CalcSubresource(0, 0, 1); |
|
|
|
|
|
|
|
|
|
D3D11_MAPPED_SUBRESOURCE mappedTex; |
|
|
|
|
r = m_pD3D11Ctx->Map(pSurface, subResource, D3D11_MAP_WRITE_DISCARD, 0, &mappedTex); |
|
|
|
|
if (FAILED(r)) |
|
|
|
|
{ |
|
|
|
|
throw std::runtime_error("surface mapping failed!"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
cv::Mat m(m_height, m_width, CV_8UC4, mappedTex.pData, (int)mappedTex.RowPitch); |
|
|
|
|
|
|
|
|
|
cv::String strMode = cv::format("%s", m_modeStr[mode].c_str()); |
|
|
|
|
cv::String strProcessing = m_demo_processing ? "blur frame" : "copy frame"; |
|
|
|
|
cv::String strFPS = cv::format("%2.1f", fps); |
|
|
|
|
cv::String strDevName = cv::format("%s", oclDevName.c_str()); |
|
|
|
|
|
|
|
|
|
cv::putText(m, strMode, cv::Point(0, 16), 1, 0.8, cv::Scalar(0, 0, 0)); |
|
|
|
|
cv::putText(m, strProcessing, cv::Point(0, 32), 1, 0.8, cv::Scalar(0, 0, 0)); |
|
|
|
|
cv::putText(m, strFPS, cv::Point(0, 48), 1, 0.8, cv::Scalar(0, 0, 0)); |
|
|
|
|
cv::putText(m, strDevName, cv::Point(0, 64), 1, 0.8, cv::Scalar(0, 0, 0)); |
|
|
|
|
|
|
|
|
|
m_pD3D11Ctx->Unmap(pSurface, subResource); |
|
|
|
|
|
|
|
|
|
return; |
|
|
|
|
} // printf_info()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int cleanup(void) |
|
|
|
|
{ |
|
|
|
|
SAFE_RELEASE(m_pSurface); |
|
|
|
|