diff options
| author | assiduous <assiduous@diligentgraphics.com> | 2020-01-26 19:37:26 +0000 |
|---|---|---|
| committer | assiduous <assiduous@diligentgraphics.com> | 2020-01-26 19:37:26 +0000 |
| commit | dede98a2da8e4bd9c8e26f2a51f71b1d82905147 (patch) | |
| tree | 433d246ac7ddb238c7d1ed04902647111fb74809 | |
| parent | Fixed Render device, query, PSO and fence C interfaces; added render device C... (diff) | |
| download | DiligentCore-dede98a2da8e4bd9c8e26f2a51f71b1d82905147.tar.gz DiligentCore-dede98a2da8e4bd9c8e26f2a51f71b1d82905147.zip | |
Added query C interface test
| -rw-r--r-- | Graphics/GraphicsEngineOpenGL/src/QueryGLImpl.cpp | 3 | ||||
| -rw-r--r-- | Tests/DiligentCoreAPITest/src/QueryTest.cpp | 8 | ||||
| -rw-r--r-- | Tests/DiligentCoreAPITest/src/c_interface/Query_C_Test.c | 84 |
3 files changed, 94 insertions, 1 deletions
diff --git a/Graphics/GraphicsEngineOpenGL/src/QueryGLImpl.cpp b/Graphics/GraphicsEngineOpenGL/src/QueryGLImpl.cpp index a33de7ce..3308e841 100644 --- a/Graphics/GraphicsEngineOpenGL/src/QueryGLImpl.cpp +++ b/Graphics/GraphicsEngineOpenGL/src/QueryGLImpl.cpp @@ -54,6 +54,9 @@ QueryGLImpl::~QueryGLImpl() bool QueryGLImpl::GetData(void* pData, Uint32 DataSize, bool AutoInvalidate) { + if (!TQueryBase::CheckQueryDataPtr(pData, DataSize)) + return false; + GLuint ResultAvailable = GL_FALSE; switch (m_Desc.Type) diff --git a/Tests/DiligentCoreAPITest/src/QueryTest.cpp b/Tests/DiligentCoreAPITest/src/QueryTest.cpp index e4df34fa..2030d827 100644 --- a/Tests/DiligentCoreAPITest/src/QueryTest.cpp +++ b/Tests/DiligentCoreAPITest/src/QueryTest.cpp @@ -36,6 +36,11 @@ using namespace Diligent; using namespace Diligent::Testing; +extern "C" +{ + int TestQueryCInterface(void* pQuery); +} + namespace { @@ -396,8 +401,9 @@ TEST_F(QueryTest, Timestamp) QueryReady = pQueryEnd->GetData(nullptr, 0); ASSERT_TRUE(QueryReady) << "Query data must be available after idling the context"; - QueryReady = pQueryEnd->GetData(&QueryEndData, sizeof(QueryEndData)); + QueryReady = pQueryEnd->GetData(&QueryEndData, sizeof(QueryEndData), false); ASSERT_TRUE(QueryReady) << "Query data must be available after idling the context"; + EXPECT_EQ(TestQueryCInterface(pQueryEnd.RawPtr()), 0); EXPECT_TRUE(QueryStartData.Frequency == 0 || QueryEndData.Frequency == 0 || QueryEndData.Counter > QueryStartData.Counter); } } diff --git a/Tests/DiligentCoreAPITest/src/c_interface/Query_C_Test.c b/Tests/DiligentCoreAPITest/src/c_interface/Query_C_Test.c new file mode 100644 index 00000000..377b10f5 --- /dev/null +++ b/Tests/DiligentCoreAPITest/src/c_interface/Query_C_Test.c @@ -0,0 +1,84 @@ +/* + * Copyright 2019-2020 Diligent Graphics LLC + * Copyright 2015-2019 Egor Yusov + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * In no event and under no legal theory, whether in tort (including negligence), + * contract, or otherwise, unless required by applicable law (such as deliberate + * and grossly negligent acts) or agreed to in writing, shall any Contributor be + * liable for any damages, including any direct, indirect, special, incidental, + * or consequential damages of any character arising as a result of this License or + * out of the use or inability to use the software (including but not limited to damages + * for loss of goodwill, work stoppage, computer failure or malfunction, or any and + * all other commercial damages or losses), even if such Contributor has been advised + * of the possibility of such damages. + */ + +#include "Query.h" + +int TestObjectCInterface(struct IObject* pObject); +int TestDeviceObjectCInterface(struct IDeviceObject* pDeviceObject); + +int TestQueryCInterface(struct IQuery* pQuery) +{ + struct IObject* pUnknown = NULL; + ReferenceCounterValueType RefCnt1 = 0, RefCnt2 = 0; + + struct DeviceObjectAttribs Desc; + Int32 UniqueId = 0; + + struct QueryDataTimestamp queryData = {QUERY_TYPE_TIMESTAMP}; + bool QueryDataReady = false; + + struct QueryDesc QueryDesc; + + int num_errors = + TestObjectCInterface((struct IObject*)pQuery) + + TestDeviceObjectCInterface((struct IDeviceObject*)pQuery); + + IObject_QueryInterface(pQuery, &IID_Unknown, &pUnknown); + if (pUnknown != NULL) + IObject_Release(pUnknown); + else + ++num_errors; + + RefCnt1 = IObject_AddRef(pQuery); + if (RefCnt1 <= 1) + ++num_errors; + RefCnt2 = IObject_Release(pQuery); + if (RefCnt2 <= 0) + ++num_errors; + if (RefCnt2 != RefCnt1 - 1) + ++num_errors; + + Desc = *IDeviceObject_GetDesc(pQuery); + if (Desc.Name == NULL) + ++num_errors; + + UniqueId = IDeviceObject_GetUniqueID(pQuery); + if (UniqueId == 0) + ++num_errors; + + QueryDesc = *IQuery_GetDesc(pQuery); + if (QueryDesc.Type != QUERY_TYPE_TIMESTAMP) + ++num_errors; + + QueryDataReady = IQuery_GetData(pQuery, &queryData, sizeof(queryData), false); + if (!QueryDataReady) + ++num_errors; + + IQuery_Invalidate(pQuery); + + return num_errors; +} |
