From 0a276031783dcdfac84ac3617765ac60d18d4fbf Mon Sep 17 00:00:00 2001
From: foreman
Date: Tue, 7 Jan 2020 17:59:52 -0500
Subject: [PATCH] P4 to Git Change 2053377 by gandryey@gera-win10 on 2020/01/07
17:55:38
SWDEV-218016 - There is a bug in the OCL/DX interop
- Initialize event query value to FALSE and correct the loop condition to make sure query waits for the end.
http://ocltc.amd.com/reviews/r/18447/
Affected files ...
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_d3d10.cpp#18 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_d3d11.cpp#28 edit
---
opencl/api/opencl/amdocl/cl_d3d10.cpp | 4 ++--
opencl/api/opencl/amdocl/cl_d3d11.cpp | 9 ++++-----
2 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/opencl/api/opencl/amdocl/cl_d3d10.cpp b/opencl/api/opencl/amdocl/cl_d3d10.cpp
index 23840737ef..f01de47b15 100644
--- a/opencl/api/opencl/amdocl/cl_d3d10.cpp
+++ b/opencl/api/opencl/amdocl/cl_d3d10.cpp
@@ -1367,8 +1367,8 @@ bool D3D10Object::copyOrigToShared() {
// Flush D3D queues and make sure D3D stuff is finished
d3dDev->Flush();
pQuery_->End();
- BOOL data;
- while (S_OK != pQuery_->GetData(&data, sizeof(BOOL), 0) && data != TRUE) {
+ BOOL data = FALSE;
+ while ((S_OK != pQuery_->GetData(&data, sizeof(BOOL), 0)) || (data != TRUE)) {
}
d3dDev->Release();
diff --git a/opencl/api/opencl/amdocl/cl_d3d11.cpp b/opencl/api/opencl/amdocl/cl_d3d11.cpp
index 40b4c75c71..5cfbd5fdc2 100644
--- a/opencl/api/opencl/amdocl/cl_d3d11.cpp
+++ b/opencl/api/opencl/amdocl/cl_d3d11.cpp
@@ -916,9 +916,8 @@ bool D3D11Object::copyOrigToShared() {
pImmediateContext->Flush();
pImmediateContext->End(pQuery_);
BOOL data = FALSE;
- while (S_OK != pImmediateContext->GetData(pQuery_, &data, sizeof(BOOL), 0))
- ;
- {}
+ while (S_OK != pImmediateContext->GetData(pQuery_, &data, sizeof(BOOL), 0)) {
+ }
}
pImmediateContext->Release();
@@ -1032,8 +1031,8 @@ void SyncD3D11Objects(std::vector& memObjects) {
{
ScopedLock sl(d3dObj->getResLock());
pImmediateContext->End(query);
- BOOL data;
- while (S_OK != pImmediateContext->GetData(query, &data, sizeof(BOOL), 0) && data != TRUE) {
+ BOOL data = FALSE;
+ while ((S_OK != pImmediateContext->GetData(query, &data, sizeof(BOOL), 0)) || (data != TRUE)) {
}
}