diff options
Diffstat (limited to 'tests/auto/runtime/base')
20 files changed, 0 insertions, 4240 deletions
diff --git a/tests/auto/runtime/base/Qt3DSRenderTestAtomicCounterBuffer.cpp b/tests/auto/runtime/base/Qt3DSRenderTestAtomicCounterBuffer.cpp deleted file mode 100644 index 9f81214f..00000000 --- a/tests/auto/runtime/base/Qt3DSRenderTestAtomicCounterBuffer.cpp +++ /dev/null @@ -1,248 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2012 NVIDIA Corporation. -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "Qt3DSRenderTestAtomicCounterBuffer.h" -#include "../Qt3DSRenderTestMathUtil.h" -#include "render/Qt3DSRenderAtomicCounterBuffer.h" -#include "render/Qt3DSRenderShaderProgram.h" - -#include <string> - -using namespace qt3ds; -using namespace qt3ds::render; - -struct Vertex -{ - QT3DSVec3 positions; -}; - -static const char *vertShader(std::string &prog, bool binESContext) -{ - if (binESContext) { - prog += "#version 310 es\n" - "precision highp float;\n" - "precision highp int;\n"; - } else { - prog += "#version 430\n"; - } - - prog += "uniform mat4 mat_mvp;\n" - "in vec3 attr_pos; // Vertex pos\n" - "void main()\n" - "{\n" - " gl_Position = vec4(attr_pos, 1.0);\n" - "}\n"; - - return prog.c_str(); -} - -static const char *fragShader(std::string &prog, bool binESContext) -{ - if (binESContext) { - prog += "#version 310 es\n" - "precision highp float;\n" - "precision highp int;\n"; - } else { - prog += "#version 430\n"; - } - - prog += "layout(binding = 2, offset = 0) uniform atomic_uint ac_raster;\n" - "out vec4 fragColor;\n" - "void main()\n" - "{\n" - " uint counter = atomicCounterIncrement(ac_raster);\n" - " float g = (float(counter)/255.0) / 255.0;\n" - " fragColor = vec4(0.0, g, 0.0, 1.0);\n" - "}\n"; - - return prog.c_str(); -} - -NVRenderTestAtomicCounterBuffer::NVRenderTestAtomicCounterBuffer() -{ - _curTest = 0; - _maxColumn = 4; -} - -NVRenderTestAtomicCounterBuffer::~NVRenderTestAtomicCounterBuffer() -{ -} - -bool NVRenderTestAtomicCounterBuffer::isSupported(NVRenderContext *context) -{ - // This is currently only supported on GL 4 and GLES 3.1 - if (!context->IsAtomicCounterBufferSupported()) - return false; - - return true; -} - -//////////////////////////////// -// test for functionality -//////////////////////////////// - -inline NVConstDataRef<QT3DSI8> toRef(const char *data) -{ - size_t len = strlen(data) + 1; - return NVConstDataRef<QT3DSI8>((const QT3DSI8 *)data, (QT3DSU32)len); -} - -bool NVRenderTestAtomicCounterBuffer::run(NVRenderContext *context, userContextData *pUserData) -{ - bool success = true; - // conpute cell width - _cellSize = pUserData->winWidth / _maxColumn; - - context->SetClearColor(QT3DSVec4(.0f, .0f, .0f, 1.f)); - context->Clear(NVRenderClearFlags(NVRenderClearValues::Color | NVRenderClearValues::Depth)); - - success &= rasterizerTest(context, pUserData); - _curTest++; - - // cleanup - context->SetViewport(NVRenderRect(0, 0, pUserData->winWidth, pUserData->winHeight)); - - return success; -} - -bool NVRenderTestAtomicCounterBuffer::rasterizerTest(NVRenderContext *context, - userContextData *pUserData) -{ - static const Vertex vertexPositions[] = { { QT3DSVec3(-0.9, -0.9, 0) }, { QT3DSVec3(0.9, 0.9, 0) }, - { QT3DSVec3(-0.9, 0.9, 0) }, { QT3DSVec3(-0.9, -0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, { QT3DSVec3(0.9, 0.9, 0) } }; - - NVScopedRefCounted<NVRenderVertexBuffer> mVertexBuffer; - NVScopedRefCounted<NVRenderAttribLayout> mAttribLayout; - NVScopedRefCounted<NVRenderInputAssembler> mInputAssembler; - NVScopedRefCounted<NVRenderIndexBuffer> mIndexBuffer; - NVScopedRefCounted<NVRenderAtomicCounterBuffer> mAtomicCounterBuffer; - QT3DSMat44 mvp = QT3DSMat44::createIdentity(); - NvGl2DemoMatrixOrtho(&mvp, -1, 1, -1, 1, -10, 10); - - // create atomic counter buffer - QT3DSU32 acCounter = 0; - NVDataRef<QT3DSU8> acData((QT3DSU8 *)&acCounter, sizeof(QT3DSU32)); - mAtomicCounterBuffer = context->CreateAtomicCounterBuffer( - "ac_buffer", NVRenderBufferUsageType::Static, sizeof(QT3DSU32), acData); - if (!mAtomicCounterBuffer) { - qWarning() << "NVRenderTestAtomicCounterBuffer: Failed to create atomic counter buffer"; - return false; - } - // add a parameter - CRegisteredString theACName(context->GetStringTable().RegisterStr("ac_raster")); - mAtomicCounterBuffer->AddParam(theACName, 0); - - // create shaders - std::string vtxProg; - std::string frgProg; - NVRenderVertFragCompilationResult compResult = - context->CompileSource("NVRenderTestAtomicCounterBuffer shader", - toRef(vertShader(vtxProg, isGLESContext(context))), - toRef(fragShader(frgProg, isGLESContext(context)))); - if (!compResult.mShader) { - return false; - } - - unsigned int curY = 0; - unsigned int curX = _curTest; - if (_curTest >= _maxColumn) { - curY = (_curTest / _maxColumn); - curX = (_curTest % _maxColumn); - } - - // set viewport - context->SetViewport(NVRenderRect(curX * _cellSize, curY * _cellSize, _cellSize, _cellSize)); - - // this is the layout - NVRenderVertexBufferEntry entries[] = { - NVRenderVertexBufferEntry("attr_pos", NVRenderComponentTypes::QT3DSF32, 3, 0), - }; - - QT3DSU32 bufSize = 6 * sizeof(Vertex); - NVDataRef<QT3DSU8> vertData((QT3DSU8 *)vertexPositions, bufSize); - mVertexBuffer = context->CreateVertexBuffer(NVRenderBufferUsageType::Static, bufSize, - 3 * sizeof(QT3DSF32), vertData); - if (!mVertexBuffer) { - qWarning() << "NVRenderTestAtomicCounterBuffer: Failed to create vertex buffer"; - return false; - } - - // create our attribute layout - mAttribLayout = context->CreateAttributeLayout(toConstDataRef(entries, 1)); - // create input Assembler - QT3DSU32 strides = mVertexBuffer->GetStride(); - QT3DSU32 offsets = 0; - mInputAssembler = context->CreateInputAssembler( - mAttribLayout, toConstDataRef(&mVertexBuffer.mPtr, 1), mIndexBuffer.mPtr, - toConstDataRef(&strides, 1), toConstDataRef(&offsets, 1), NVRenderDrawMode::Triangles); - if (!mInputAssembler) { - qWarning() << "NVRenderTestAtomicCounterBuffer: Failed to create input assembler"; - return false; - } - - // make input assembler active - context->SetInputAssembler(mInputAssembler); - // set program - context->SetActiveShader(compResult.mShader); - compResult.mShader->SetPropertyValue("mat_mvp", mvp); - qt3ds::render::NVRenderCachedShaderBuffer<NVRenderShaderAtomicCounterBuffer *> atomicBuffer( - "ac_buffer", *compResult.mShader); - atomicBuffer.Set(); - - context->SetDepthTestEnabled(true); - context->SetDepthWriteEnabled(true); - - // draw - context->Draw(mInputAssembler->GetPrimitiveType(), 6, 0); - - context->SetActiveShader(0); - compResult.mShader->release(); - - return true; -} - -//////////////////////////////// -// performance test -//////////////////////////////// -bool NVRenderTestAtomicCounterBuffer::runPerformance(NVRenderContext *context, - userContextData *pUserData) -{ - return true; -} - -//////////////////////////////// -// test cleanup -//////////////////////////////// -void NVRenderTestAtomicCounterBuffer::cleanup(NVRenderContext *context, userContextData *pUserData) -{ - context->SetClearColor(QT3DSVec4(0.0f, .0f, .0f, 0.f)); - // dummy - context->SetViewport(NVRenderRect(0, 0, pUserData->winWidth, pUserData->winHeight)); -} diff --git a/tests/auto/runtime/base/Qt3DSRenderTestAtomicCounterBuffer.h b/tests/auto/runtime/base/Qt3DSRenderTestAtomicCounterBuffer.h deleted file mode 100644 index 87b0910a..00000000 --- a/tests/auto/runtime/base/Qt3DSRenderTestAtomicCounterBuffer.h +++ /dev/null @@ -1,59 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2014 NVIDIA Corporation. -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef QT3DS_RENDER_TEST_ATOMIC_COUNTER_BUFFER_H -#define QT3DS_RENDER_TEST_ATOMIC_COUNTER_BUFFER_H - -#include "../Qt3DSRenderTestBase.h" - -namespace qt3ds { -namespace render { - - /// This class tests the creation of all kinds of primitives - class NVRenderTestAtomicCounterBuffer : public NVRenderTestBase - { - public: - NVRenderTestAtomicCounterBuffer(); - ~NVRenderTestAtomicCounterBuffer(); - - bool isSupported(NVRenderContext *context); - bool run(NVRenderContext *context, userContextData *pUserData); - bool runPerformance(NVRenderContext *context, userContextData *pContextData); - void cleanup(NVRenderContext *context, userContextData *pUserData); - - private: - bool rasterizerTest(NVRenderContext *context, userContextData *pUserData); - - unsigned int _curTest; - unsigned int _cellSize; - unsigned int _maxColumn; - }; -} -} - -#endif // QT3DS_RENDER_TEST_ATOMIC_COUNTER_BUFFER_H diff --git a/tests/auto/runtime/base/Qt3DSRenderTestAttribBuffers.cpp b/tests/auto/runtime/base/Qt3DSRenderTestAttribBuffers.cpp deleted file mode 100644 index 805782f7..00000000 --- a/tests/auto/runtime/base/Qt3DSRenderTestAttribBuffers.cpp +++ /dev/null @@ -1,251 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2012 NVIDIA Corporation. -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "Qt3DSRenderTestAttribBuffers.h" -#include "../Qt3DSRenderTestMathUtil.h" -#include "render/Qt3DSRenderShaderProgram.h" - -#include <string> - -using namespace qt3ds; -using namespace qt3ds::render; - -struct Vertex -{ - QT3DSVec3 positions; -}; - -static const char *vertShader(std::string &prog, bool binESContext) -{ - if (binESContext) { - prog += "#version 300 es\n" - "precision highp float;\n" - "precision highp int;\n"; - } else { - prog += "#version 430\n"; - } - - prog += "uniform mat4 mat_mvp;\n" - "in vec3 attr_pos; // Vertex pos\n" - "in vec3 attr_col; // Vertex col\n" - "out vec3 color; // output color\n" - "void main()\n" - "{\n" - " gl_Position = vec4(attr_pos, 1.0);\n" - " color = attr_col;\n" - "}\n"; - - return prog.c_str(); -} - -static const char *fragShader(std::string &prog, bool binESContext) -{ - if (binESContext) { - prog += "#version 300 es\n" - "precision highp float;\n" - "precision highp int;\n"; - } else { - prog += "#version 430\n"; - } - - prog += "in vec3 color; // input color\n" - "out vec4 fragColor;\n" - "void main()\n" - "{\n" - " fragColor = vec4( color, 1.0);\n" - "}\n"; - - return prog.c_str(); -} - -NVRenderTestAttribBuffers::NVRenderTestAttribBuffers() -{ - _curTest = 0; - _maxColumn = 4; -} - -NVRenderTestAttribBuffers::~NVRenderTestAttribBuffers() -{ -} - -bool NVRenderTestAttribBuffers::isSupported(NVRenderContext *context) -{ - return true; -} - -//////////////////////////////// -// test for functionality -//////////////////////////////// - -inline NVConstDataRef<QT3DSI8> toRef(const char *data) -{ - size_t len = strlen(data) + 1; - return NVConstDataRef<QT3DSI8>((const QT3DSI8 *)data, (QT3DSU32)len); -} - -bool NVRenderTestAttribBuffers::run(NVRenderContext *context, userContextData *pUserData) -{ - bool success = true; - // conpute cell width - _cellSize = pUserData->winWidth / _maxColumn; - - context->SetClearColor(QT3DSVec4(.0f, .0f, .0f, 1.f)); - context->Clear(NVRenderClearFlags(NVRenderClearValues::Color | NVRenderClearValues::Depth)); - - success &= multiAttribBufferTest(context, pUserData); - _curTest++; - - // cleanup - context->SetViewport(NVRenderRect(0, 0, pUserData->winWidth, pUserData->winHeight)); - - return success; -} - -bool NVRenderTestAttribBuffers::multiAttribBufferTest(NVRenderContext *context, - userContextData *pUserData) -{ - static const Vertex vertexPositions[] = { { QT3DSVec3(-0.9, -0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, - { QT3DSVec3(0.0, 0.9, 0) } }; - - static const Vertex vertexColors[] = { { QT3DSVec3(0.0, 1.0, 0.0) }, - { QT3DSVec3(0.0, 0.6, 0.0) }, - { QT3DSVec3(0.0, 0.2, 0.0) } }; - - NVScopedRefCounted<NVRenderVertexBuffer> mVertexBuffer; - NVScopedRefCounted<NVRenderVertexBuffer> mColorBuffer; - NVScopedRefCounted<NVRenderAttribLayout> mAttribLayout; - NVScopedRefCounted<NVRenderInputAssembler> mInputAssembler; - NVRenderVertexBuffer *attribBuffers[2]; - QT3DSMat44 mvp = QT3DSMat44::createIdentity(); - NvGl2DemoMatrixOrtho(&mvp, -1, 1, -1, 1, -10, 10); - qt3ds::QT3DSVec3 color(0.0, 1.0, 0.0); - - // create shaders - std::string vtxProg; - std::string frgProg; - NVRenderVertFragCompilationResult compResult = context->CompileSource( - "NVRenderTestAttribBuffers shader", toRef(vertShader(vtxProg, isGLESContext(context))), - toRef(fragShader(frgProg, isGLESContext(context)))); - if (!compResult.mShader) { - return false; - } - - unsigned int curY = 0; - unsigned int curX = _curTest; - if (_curTest >= _maxColumn) { - curY = (_curTest / _maxColumn); - curX = (_curTest % _maxColumn); - } - - // set viewport - context->SetViewport(NVRenderRect(curX * _cellSize, curY * _cellSize, _cellSize, _cellSize)); - - // this is the layout - NVRenderVertexBufferEntry entries[] = { - NVRenderVertexBufferEntry("attr_pos", NVRenderComponentTypes::QT3DSF32, 3, 0, 0), - NVRenderVertexBufferEntry("attr_col", NVRenderComponentTypes::QT3DSF32, 3, 0, 1), - }; - - // position buffer - QT3DSU32 bufSize = 3 * sizeof(Vertex); - NVDataRef<QT3DSU8> vertData((QT3DSU8 *)vertexPositions, bufSize); - mVertexBuffer = context->CreateVertexBuffer(NVRenderBufferUsageType::Static, bufSize, - 3 * sizeof(QT3DSF32), vertData); - if (!mVertexBuffer) { - qWarning() << "NVRenderTestAttribBuffers: Failed to create vertex buffer"; - return false; - } - // color buffer - NVDataRef<QT3DSU8> colorData((QT3DSU8 *)vertexColors, bufSize); - mColorBuffer = context->CreateVertexBuffer(NVRenderBufferUsageType::Static, bufSize, - 3 * sizeof(QT3DSF32), colorData); - if (!mColorBuffer) { - qWarning() << "NVRenderTestAttribBuffers: Failed to create color buffer"; - return false; - } - - attribBuffers[0] = mVertexBuffer; - attribBuffers[1] = mColorBuffer; - - // create our attribute layout - mAttribLayout = context->CreateAttributeLayout(toConstDataRef(entries, 2)); - // create input Assembler - QT3DSU32 strides[2]; - QT3DSU32 offsets[2]; - strides[0] = mVertexBuffer->GetStride(); - offsets[0] = 0; - strides[1] = mColorBuffer->GetStride(); - offsets[1] = 0; - - mInputAssembler = context->CreateInputAssembler( - mAttribLayout, NVConstDataRef<NVRenderVertexBuffer *>(attribBuffers, 2), NULL, - toConstDataRef(strides, 2), toConstDataRef(offsets, 2), NVRenderDrawMode::Triangles); - if (!mInputAssembler) { - qWarning() << "NVRenderTestAttribBuffers: Failed to create input assembler"; - return false; - } - - // make input assembler active - context->SetInputAssembler(mInputAssembler); - // set program - context->SetActiveShader(compResult.mShader); - compResult.mShader->SetPropertyValue("mat_mvp", mvp); - // set color - compResult.mShader->SetPropertyValue("color", color); - - context->SetDepthTestEnabled(true); - context->SetDepthWriteEnabled(true); - - // draw - context->Draw(mInputAssembler->GetPrimitiveType(), 3, 0); - - context->SetActiveShader(0); - compResult.mShader->release(); - - return true; -} - -//////////////////////////////// -// performance test -//////////////////////////////// -bool NVRenderTestAttribBuffers::runPerformance(NVRenderContext *context, userContextData *pUserData) -{ - return true; -} - -//////////////////////////////// -// test cleanup -//////////////////////////////// -void NVRenderTestAttribBuffers::cleanup(NVRenderContext *context, userContextData *pUserData) -{ - context->SetClearColor(QT3DSVec4(0.0f, .0f, .0f, 0.f)); - // dummy - context->SetViewport(NVRenderRect(0, 0, pUserData->winWidth, pUserData->winHeight)); -} diff --git a/tests/auto/runtime/base/Qt3DSRenderTestAttribBuffers.h b/tests/auto/runtime/base/Qt3DSRenderTestAttribBuffers.h deleted file mode 100644 index 47e898f2..00000000 --- a/tests/auto/runtime/base/Qt3DSRenderTestAttribBuffers.h +++ /dev/null @@ -1,59 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2014 NVIDIA Corporation. -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef QT3DS_RENDER_TEST_ATTRIB_BUFFERS_H -#define QT3DS_RENDER_TEST_ATTRIB_BUFFERS_H - -#include "../Qt3DSRenderTestBase.h" - -namespace qt3ds { -namespace render { - - /// This class tests the creation of all kinds of primitives - class NVRenderTestAttribBuffers : public NVRenderTestBase - { - public: - NVRenderTestAttribBuffers(); - ~NVRenderTestAttribBuffers(); - - bool isSupported(NVRenderContext *context); - bool run(NVRenderContext *context, userContextData *pUserData); - bool runPerformance(NVRenderContext *context, userContextData *pContextData); - void cleanup(NVRenderContext *context, userContextData *pUserData); - - private: - bool multiAttribBufferTest(NVRenderContext *context, userContextData *pUserData); - - unsigned int _curTest; - unsigned int _cellSize; - unsigned int _maxColumn; - }; -} -} - -#endif // QT3DS_RENDER_TEST_ATTRIB_BUFFERS_H diff --git a/tests/auto/runtime/base/Qt3DSRenderTestBackendQuery.cpp b/tests/auto/runtime/base/Qt3DSRenderTestBackendQuery.cpp deleted file mode 100644 index 30f26378..00000000 --- a/tests/auto/runtime/base/Qt3DSRenderTestBackendQuery.cpp +++ /dev/null @@ -1,332 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2012 NVIDIA Corporation. -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "Qt3DSRenderTestBackendQuery.h" -#include "../Qt3DSRenderTestMathUtil.h" -#include "render/Qt3DSRenderShaderProgram.h" - -using namespace qt3ds; -using namespace qt3ds::render; - -static const char *PassthroughVertShader() -{ - return "uniform mat4 mat_mvp;\n" - "attribute vec3 attr_pos; // Vertex pos\n" - "void main()\n" - "{\n" - " gl_Position = mat_mvp * vec4(attr_pos, 1.0);\n" - "}\n"; -} - -static const char *SimpleFragShader() -{ - return "#ifdef GL_ES\n" - "precision mediump float;\n" - "#endif\n" - "uniform vec3 color;\n" - "void main()\n" - "{\n" - "gl_FragColor = vec4( color, 1);\n" - "}\n"; -} - -struct Vertex -{ - QT3DSVec3 positions; -}; - -static const Vertex vertexPositions[] = { { QT3DSVec3(-0.9, 0.9, 0) }, { QT3DSVec3(-0.9, -0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, { QT3DSVec3(-0.9, 0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, { QT3DSVec3(0.9, 0.9, 0) } }; - -NVRenderTestBackendQuery::NVRenderTestBackendQuery() -{ - _curTest = 0; - _maxColumn = 4; -} - -NVRenderTestBackendQuery::~NVRenderTestBackendQuery() -{ -} - -bool NVRenderTestBackendQuery::isSupported(NVRenderContext *context) -{ - return true; -} - -//////////////////////////////// -// test for functionality -//////////////////////////////// - -inline NVConstDataRef<QT3DSI8> toRef(const char *data) -{ - size_t len = strlen(data) + 1; - return NVConstDataRef<QT3DSI8>((const QT3DSI8 *)data, (QT3DSU32)len); -} - -bool NVRenderTestBackendQuery::run(NVRenderContext *context, userContextData *pUserData) -{ - bool success = true; - // conpute cell width - _cellSize = pUserData->winWidth / _maxColumn; - - context->SetClearColor(QT3DSVec4(.0f, .0f, .0f, 1.f)); - context->Clear(NVRenderClearFlags(NVRenderClearValues::Color | NVRenderClearValues::Depth)); - - success &= depthBitsTest(context, pUserData); - _curTest++; - success &= depthBitsFBOTest(context, pUserData); - _curTest++; - - // cleanup - context->SetViewport(NVRenderRect(0, 0, pUserData->winWidth, pUserData->winHeight)); - - return success; -} - -bool NVRenderTestBackendQuery::renderQuad(NVRenderContext *context, userContextData *pUserData, - QT3DSVec3 color) -{ - NVScopedRefCounted<NVRenderVertexBuffer> mVertexBuffer; - NVScopedRefCounted<NVRenderAttribLayout> mAttribLayout; - NVScopedRefCounted<NVRenderInputAssembler> mInputAssembler; - NVScopedRefCounted<NVRenderIndexBuffer> mIndexBuffer; - QT3DSMat44 mvp = QT3DSMat44::createIdentity(); - NvGl2DemoMatrixOrtho(&mvp, -1, 1, -1, 1, -10, 10); - - // create shaders - NVRenderVertFragCompilationResult compResult = - context->CompileSource("NVRenderTestBackendQuery shader", toRef(PassthroughVertShader()), - toRef(SimpleFragShader())); - if (!compResult.mShader) { - return false; - } - - unsigned int curY = 0; - unsigned int curX = _curTest; - if (_curTest >= _maxColumn) { - curY = (_curTest / _maxColumn); - curX = (_curTest % _maxColumn); - } - - // set viewport - context->SetViewport(NVRenderRect(curX * _cellSize, curY * _cellSize, _cellSize, _cellSize)); - - // this is the layout - NVRenderVertexBufferEntry entries[] = { - NVRenderVertexBufferEntry("attr_pos", NVRenderComponentTypes::QT3DSF32, 3, 0), - }; - - QT3DSU32 bufSize = 6 * sizeof(Vertex); - NVDataRef<QT3DSU8> vertData((QT3DSU8 *)vertexPositions, bufSize); - mVertexBuffer = context->CreateVertexBuffer(NVRenderBufferUsageType::Static, bufSize, - 3 * sizeof(QT3DSF32), vertData); - if (!mVertexBuffer) { - qWarning() << "NVRenderTestBackendQuery::depthBitsTest: Failed to create vertex buffer"; - return false; - } - - // create our attribute layout - mAttribLayout = context->CreateAttributeLayout(toConstDataRef(entries, 1)); - // create input Assembler - QT3DSU32 strides = mVertexBuffer->GetStride(); - QT3DSU32 offsets = 0; - mInputAssembler = context->CreateInputAssembler( - mAttribLayout, toConstDataRef(&mVertexBuffer.mPtr, 1), mIndexBuffer.mPtr, - toConstDataRef(&strides, 1), toConstDataRef(&offsets, 1)); - if (!mInputAssembler) { - qWarning() << "NVRenderTestBackendQuery::depthBitsTest: Failed to create input assembler"; - return false; - } - - // check if default buffer bit size is in an acceptable size range - // we accept a range from 16 to 32 - const QT3DSU32 bits = context->GetDepthBits(); - bool passed = (bits >= 16 && bits <= 32); - - // make input assembler active - context->SetInputAssembler(mInputAssembler); - // set program - context->SetActiveShader(compResult.mShader); - compResult.mShader->SetPropertyValue("mat_mvp", mvp); - // set color - compResult.mShader->SetPropertyValue("color", color); - - context->SetDepthTestEnabled(true); - context->SetDepthWriteEnabled(true); - - // draw - context->Draw(NVRenderDrawMode::Triangles, 6, 0); - - context->SetActiveShader(0); - compResult.mShader->release(); - - return passed; -} - -bool NVRenderTestBackendQuery::depthBitsTest(NVRenderContext *context, userContextData *pUserData) -{ - QT3DSVec3 color(0.0, 0.0, 0.0); - // check if default buffer bit size is in an acceptable size range - // we accept a range from 16 to 32 - const QT3DSU32 bits = context->GetDepthBits(); - bool passed = (bits >= 16 && bits <= 32); - if (passed) - color.y = 1.0; - else - color.x = 1.0; - - passed &= renderQuad(context, pUserData, color); - - return passed; -} - -bool NVRenderTestBackendQuery::depthBitsFBOTest(NVRenderContext *context, - userContextData *pUserData) -{ - // depneding on the context we get different values - NVRenderContextType theContextFlags(NVRenderContextValues::GLES2 | NVRenderContextValues::GL2); - NVRenderContextType type = context->GetRenderContextType(); - bool depth16_Only = (type & theContextFlags); - // create a FBO - NVScopedRefCounted<NVRenderFrameBuffer> m_FBO; - NVScopedRefCounted<NVRenderTexture2D> m_ColorTexture; - NVScopedRefCounted<NVRenderTexture2D> m_Depth16Texture; - NVScopedRefCounted<NVRenderTexture2D> m_Depth24Texture; - NVScopedRefCounted<NVRenderTexture2D> m_Depth32Texture; - NVScopedRefCounted<NVRenderTexture2D> m_Depth24Stencil8Texture; - - m_ColorTexture = context->CreateTexture2D(); - m_ColorTexture->SetTextureData(NVDataRef<QT3DSU8>(), 0, 256, 256, NVRenderTextureFormats::RGBA8); - m_Depth16Texture = context->CreateTexture2D(); - m_Depth16Texture->SetTextureData(NVDataRef<QT3DSU8>(), 0, 256, 256, - NVRenderTextureFormats::Depth16); - - m_FBO = context->CreateFrameBuffer(); - m_FBO->Attach(NVRenderFrameBufferAttachments::Color0, - NVRenderTextureOrRenderBuffer(*m_ColorTexture)); - m_FBO->Attach(NVRenderFrameBufferAttachments::Depth, - NVRenderTextureOrRenderBuffer(*m_Depth16Texture)); - - if (!m_FBO->IsComplete()) { - qWarning() << "NVRenderTestBackendQuery::depthBitsFBOTest: Failed to create FBO"; - return false; - } - - context->SetRenderTarget(m_FBO); - - QT3DSVec3 color(0.0, 0.0, 0.0); - // check depth bit count - QT3DSU32 bits = context->GetDepthBits(); - QT3DSU32 bitsExpected = 16; - bool passed = (bits == bitsExpected); - - // detach depth - m_FBO->Attach(NVRenderFrameBufferAttachments::Depth, NVRenderTextureOrRenderBuffer()); - - m_Depth24Texture = context->CreateTexture2D(); - m_Depth24Texture->SetTextureData(NVDataRef<QT3DSU8>(), 0, 256, 256, - NVRenderTextureFormats::Depth24); - m_FBO->Attach(NVRenderFrameBufferAttachments::Depth, - NVRenderTextureOrRenderBuffer(*m_Depth24Texture)); - if (!m_FBO->IsComplete()) { - qWarning() << "NVRenderTestBackendQuery::depthBitsFBOTest: Failed to create FBO"; - return false; - } - // check depth bit count - bits = context->GetDepthBits(); - bitsExpected = (depth16_Only) ? 16 : 24; - passed &= (bits == bitsExpected); - - // detach depth - m_FBO->Attach(NVRenderFrameBufferAttachments::Depth, NVRenderTextureOrRenderBuffer()); - - m_Depth32Texture = context->CreateTexture2D(); - m_Depth32Texture->SetTextureData(NVDataRef<QT3DSU8>(), 0, 256, 256, - NVRenderTextureFormats::Depth32); - m_FBO->Attach(NVRenderFrameBufferAttachments::Depth, - NVRenderTextureOrRenderBuffer(*m_Depth32Texture)); - if (!m_FBO->IsComplete()) { - qWarning() << "NVRenderTestBackendQuery::depthBitsFBOTest: Failed to create FBO"; - return false; - } - // check depth bit count - bits = context->GetDepthBits(); - bitsExpected = (depth16_Only) ? 16 : 32; - passed &= (bits == bitsExpected); - - // detach depth - m_FBO->Attach(NVRenderFrameBufferAttachments::Depth, NVRenderTextureOrRenderBuffer()); - - // only test depth stencil if supported - if (context->IsDepthStencilSupported()) { - m_Depth24Stencil8Texture = context->CreateTexture2D(); - m_Depth24Stencil8Texture->SetTextureData(NVDataRef<QT3DSU8>(), 0, 256, 256, - NVRenderTextureFormats::Depth24Stencil8); - m_FBO->Attach(NVRenderFrameBufferAttachments::DepthStencil, - NVRenderTextureOrRenderBuffer(*m_Depth24Stencil8Texture)); - if (!m_FBO->IsComplete()) { - qWarning() << "NVRenderTestBackendQuery::depthBitsFBOTest: Failed to create FBO"; - return false; - } - // check depth bit count - bits = context->GetDepthBits(); - bitsExpected = (depth16_Only) ? 16 : 24; - passed &= (bits == bitsExpected); - } - - context->SetRenderTarget(NULL); - - if (passed) - color.y = 1.0; - else - color.x = 1.0; - - passed &= renderQuad(context, pUserData, color); - - return passed; -} - -//////////////////////////////// -// performance test -//////////////////////////////// -bool NVRenderTestBackendQuery::runPerformance(NVRenderContext *context, userContextData *pUserData) -{ - return true; -} - -//////////////////////////////// -// test cleanup -//////////////////////////////// -void NVRenderTestBackendQuery::cleanup(NVRenderContext *context, userContextData *pUserData) -{ - context->SetClearColor(QT3DSVec4(0.0f, .0f, .0f, 0.f)); - // dummy - context->SetViewport(NVRenderRect(0, 0, pUserData->winWidth, pUserData->winHeight)); -} diff --git a/tests/auto/runtime/base/Qt3DSRenderTestBackendQuery.h b/tests/auto/runtime/base/Qt3DSRenderTestBackendQuery.h deleted file mode 100644 index e5fde648..00000000 --- a/tests/auto/runtime/base/Qt3DSRenderTestBackendQuery.h +++ /dev/null @@ -1,62 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2014 NVIDIA Corporation. -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef QT3DS_RENDER_TEST_BACKEND_QUERY_H -#define QT3DS_RENDER_TEST_BACKEND_QUERY_H - -#include "../Qt3DSRenderTestBase.h" - -namespace qt3ds { -namespace render { - - /// This class tests the creation of all kinds of primitives - class NVRenderTestBackendQuery : public NVRenderTestBase - { - public: - NVRenderTestBackendQuery(); - ~NVRenderTestBackendQuery(); - - bool isSupported(NVRenderContext *context); - bool run(NVRenderContext *context, userContextData *pUserData); - bool runPerformance(NVRenderContext *context, userContextData *pContextData); - void cleanup(NVRenderContext *context, userContextData *pUserData); - - private: - bool depthBitsTest(NVRenderContext *context, userContextData *pUserData); - bool depthBitsFBOTest(NVRenderContext *context, userContextData *pUserData); - - bool renderQuad(NVRenderContext *context, userContextData *pUserData, QT3DSVec3 color); - - unsigned int _curTest; - unsigned int _cellSize; - unsigned int _maxColumn; - }; -} -} - -#endif // QT3DS_RENDER_TEST_CONSTANT_BUFFER_H diff --git a/tests/auto/runtime/base/Qt3DSRenderTestClear.cpp b/tests/auto/runtime/base/Qt3DSRenderTestClear.cpp deleted file mode 100644 index 8accb864..00000000 --- a/tests/auto/runtime/base/Qt3DSRenderTestClear.cpp +++ /dev/null @@ -1,131 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2012 NVIDIA Corporation. -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "Qt3DSRenderTestClear.h" -#include "foundation/Qt3DSVec4.h" - -using namespace qt3ds; -using namespace qt3ds::render; - -NVRenderTestClear::NVRenderTestClear() -{ -} - -NVRenderTestClear::~NVRenderTestClear() -{ -} - -bool NVRenderTestClear::isSupported(NVRenderContext *context) -{ - return true; -} - -//////////////////////////////// -// test for functionality -//////////////////////////////// - -static bool checkColor(int width, int height, unsigned char *pixels, const QT3DSVec3 &color) -{ - unsigned char *pSrc = pixels; - - for (int h = 0; h < height; h++) { - for (int w = 0; w < width; w++) { - if (pSrc[0] != (unsigned char)color.x || pSrc[1] != (unsigned char)color.y - || pSrc[2] != (unsigned char)color.z) { - return false; - } - - pSrc += 3; - } - } - - return true; -} - -bool NVRenderTestClear::run(NVRenderContext *context, userContextData *pUserData) -{ - bool success = true; - - success &= testColorClear(context, pUserData); - - // if successfull draw green otherwise a red - if (success) { - // set clear color to green - context->SetClearColor(QT3DSVec4(0.0f, 1.0f, .0f, 1.f)); - context->Clear(NVRenderClearFlags(NVRenderClearValues::Color)); - } else { - // set clear color to green - context->SetClearColor(QT3DSVec4(1.0f, .0f, .0f, 1.f)); - context->Clear(NVRenderClearFlags(NVRenderClearValues::Color)); - } - - return success; -} - -bool NVRenderTestClear::testColorClear(NVRenderContext *context, userContextData *pUserData) -{ - // allocate buffer for readback - NVAllocatorCallback &alloc(context->GetFoundation().getAllocator()); - QT3DSU32 size = pUserData->winHeight * pUserData->winHeight * 3 * sizeof(QT3DSU8); - QT3DSU8 *pixels = (QT3DSU8 *)alloc.allocate(size, "testColorClear color clear", __FILE__, __LINE__); - - if (!pixels) - return false; - - // set clear color to yellow - context->SetClearColor(QT3DSVec4(1.0f, 1.0f, .0f, 0.f)); - context->Clear(NVRenderClearFlags(NVRenderClearValues::Color)); - - // read back pixels - context->ReadPixels(NVRenderRect(0, 0, pUserData->winHeight, pUserData->winHeight), - NVRenderReadPixelFormats::RGB8, NVDataRef<QT3DSU8>(pixels, size)); - // check color - bool passed = - checkColor(pUserData->winHeight, pUserData->winHeight, pixels, QT3DSVec3(255.0f, 255.0f, .0f)); - - alloc.deallocate(pixels); - - return passed; -} - -//////////////////////////////// -// performance test -//////////////////////////////// -bool NVRenderTestClear::runPerformance(NVRenderContext *context, userContextData *pUserData) -{ - return true; -} - -//////////////////////////////// -// test cleanup -//////////////////////////////// -void NVRenderTestClear::cleanup(NVRenderContext *context, userContextData *pUserData) -{ - context->SetClearColor(QT3DSVec4(0.0f, .0f, .0f, 0.f)); -} diff --git a/tests/auto/runtime/base/Qt3DSRenderTestClear.h b/tests/auto/runtime/base/Qt3DSRenderTestClear.h deleted file mode 100644 index 6113b7bd..00000000 --- a/tests/auto/runtime/base/Qt3DSRenderTestClear.h +++ /dev/null @@ -1,56 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2012 NVIDIA Corporation. -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef QT3DS_RENDER_TEST_CLEAR_H -#define QT3DS_RENDER_TEST_CLEAR_H - -#include "../Qt3DSRenderTestBase.h" - -namespace qt3ds { -namespace render { - - /// This class tests the render target clearing - class NVRenderTestClear : public NVRenderTestBase - { - public: - NVRenderTestClear(); - ~NVRenderTestClear(); - - bool isSupported(NVRenderContext *context); - bool run(NVRenderContext *context, userContextData *pUserData); - bool runPerformance(NVRenderContext *context, userContextData *pContextDat); - void cleanup(NVRenderContext *context, userContextData *pUserData); - - private: - /// subtests - bool testColorClear(NVRenderContext *context, userContextData *pUserData); - }; -} -} - -#endif // QT3DS_RENDER_TEST_CLEAR_H diff --git a/tests/auto/runtime/base/Qt3DSRenderTestConstantBuffer.cpp b/tests/auto/runtime/base/Qt3DSRenderTestConstantBuffer.cpp deleted file mode 100644 index 8b6cb344..00000000 --- a/tests/auto/runtime/base/Qt3DSRenderTestConstantBuffer.cpp +++ /dev/null @@ -1,847 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2012 NVIDIA Corporation. -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "Qt3DSRenderTestConstantBuffer.h" -#include "../Qt3DSRenderTestMathUtil.h" -#include "render/Qt3DSRenderShaderProgram.h" - -#include <string> - -using namespace qt3ds; -using namespace qt3ds::render; - -struct Vertex -{ - QT3DSVec3 positions; -}; - -static const char *scalarVertShader(bool bESContext, std::string &prog) -{ - if (bESContext) { - prog += "#version 300 es\n" - "precision highp float;\n" - "precision highp int;\n"; - } else { - prog += "#version 330 compatibility\n"; - } - - prog += "layout (std140) uniform cbBuffer { \n" - "float red;\n" - "float green;\n" - "mat4 mat_mvp;\n" - "float blue;\n };\n" - "in vec3 attr_pos; // Vertex pos\n" - "void main()\n" - "{\n" - " gl_Position = mat_mvp * vec4(attr_pos, 1.0);\n" - "}\n"; - - return prog.c_str(); -} - -static const char *scalarFragShader(bool bESContext, std::string &prog) -{ - if (bESContext) { - prog += "#version 300 es\n" - "precision highp float;\n" - "precision highp int;\n"; - } else { - prog += "#version 330 compatibility\n"; - } - - prog += "layout (std140) uniform cbBuffer { \n" - "float red;\n" - "float green;\n" - "mat4 mat_mvp;\n" - "float blue;\n };\n" - "void main()\n" - "{\n" - " gl_FragColor = vec4(red, green, blue, 1.0);\n" - "}\n"; - - return prog.c_str(); -} - -static const char *vectorVertShader(bool bESContext, std::string &prog) -{ - if (bESContext) { - prog += "#version 300 es\n" - "precision highp float;\n" - "precision highp int;\n"; - } else { - prog += "#version 330 compatibility\n"; - } - - prog += "layout (std140) uniform cbBuffer { \n" - "vec2 rg;\n" - "mat4 mat_mvp;\n" - "vec2 ba;\n };\n" - "in vec3 attr_pos; // Vertex pos\n" - "void main()\n" - "{\n" - " gl_Position = mat_mvp * vec4(attr_pos, 1.0);\n" - "}\n"; - - return prog.c_str(); -} - -static const char *vectorFragShader(bool bESContext, std::string &prog) -{ - if (bESContext) { - prog += "#version 300 es\n" - "precision highp float;\n" - "precision highp int;\n"; - } else { - prog += "#version 330 compatibility\n"; - } - - prog += "layout (std140) uniform cbBuffer { \n" - "vec2 rg;\n" - "mat4 mat_mvp;\n" - "vec2 ba;\n };\n" - "void main()\n" - "{\n" - " gl_FragColor = vec4(rg[0], rg[1], ba[0], ba[1]);\n" - "}\n"; - - return prog.c_str(); -} - -static const char *structVertShader(bool bESContext, std::string &prog) -{ - if (bESContext) { - prog += "#version 300 es\n" - "precision highp float;\n" - "precision highp int;\n"; - } else { - prog += "#version 330 compatibility\n"; - } - - prog += "struct sampleStruct {\n" - "vec2 rg;\n" - "mat4 mat_mvp;\n" - "float blue;\n" - "float alpha; };\n" - "layout (std140) uniform cbBuffer { \n" - "sampleStruct s[2]; };\n" - "in vec3 attr_pos; // Vertex pos\n" - "void main()\n" - "{\n" - " gl_Position = s[0].mat_mvp * vec4(attr_pos, 1.0);\n" - "}\n"; - - return prog.c_str(); -} - -static const char *structFragShader(bool bESContext, std::string &prog) -{ - if (bESContext) { - prog += "#version 300 es\n" - "precision highp float;\n" - "precision highp int;\n"; - } else { - prog += "#version 330 compatibility\n"; - } - - prog += "struct sampleStruct {\n" - "vec2 rg;\n" - "mat4 mat_mvp;\n" - "float blue;\n" - "float alpha; };\n" - "layout (std140) uniform cbBuffer { \n" - "sampleStruct s[2]; };\n" - "void main()\n" - "{\n" - " gl_FragColor = vec4(s[0].rg[0], s[0].rg[1], s[0].blue, s[0].alpha);\n" - "}\n"; - - return prog.c_str(); -} - -static const char *multiCBVertShader(bool bESContext, std::string &prog) -{ - if (bESContext) { - prog += "#version 300 es\n" - "precision highp float;\n" - "precision highp int;\n"; - } else { - prog += "#version 330 compatibility\n"; - } - - prog += "layout (std140) uniform cbBufferTrans { \n" - "mat4 mat_mvp;\n };\n" - "layout (std140) uniform cbBufferCol { \n" - "float red;\n" - "float green;\n" - "float blue;\n };\n" - "in vec3 attr_pos; // Vertex pos\n" - "void main()\n" - "{\n" - " gl_Position = mat_mvp * vec4(attr_pos, 1.0);\n" - "}\n"; - - return prog.c_str(); -} - -static const char *multiCBFragShader(bool bESContext, std::string &prog) -{ - if (bESContext) { - prog += "#version 300 es\n" - "precision highp float;\n" - "precision highp int;\n"; - } else { - prog += "#version 330 compatibility\n"; - } - - prog += "layout (std140) uniform cbBufferTrans { \n" - "mat4 mat_mvp;\n };\n" - "layout (std140) uniform cbBufferCol { \n" - "float red;\n" - "float green;\n" - "float blue;\n };\n" - "void main()\n" - "{\n" - " gl_FragColor = vec4(red, green, blue, 1.0);\n" - "}\n"; - - return prog.c_str(); -} - -NVRenderTestConstantBuffer::NVRenderTestConstantBuffer() -{ - _curTest = 0; - _maxColumn = 4; -} - -NVRenderTestConstantBuffer::~NVRenderTestConstantBuffer() -{ -} - -bool NVRenderTestConstantBuffer::isSupported(NVRenderContext *context) -{ - NVRenderContextType ctxType = context->GetRenderContextType(); - NVRenderContextType nonSupportedFlags(NVRenderContextValues::GL2 - | NVRenderContextValues::GLES2); - - // This is currently only supported on GL(Es) >= 3 - if ((ctxType & nonSupportedFlags)) - return false; - - return true; -} - -//////////////////////////////// -// test for functionality -//////////////////////////////// - -inline NVConstDataRef<QT3DSI8> toRef(const char *data) -{ - size_t len = strlen(data) + 1; - return NVConstDataRef<QT3DSI8>((const QT3DSI8 *)data, (QT3DSU32)len); -} - -bool NVRenderTestConstantBuffer::run(NVRenderContext *context, userContextData *pUserData) -{ - bool success = true; - // conpute cell width - _cellSize = pUserData->winWidth / _maxColumn; - - context->SetClearColor(QT3DSVec4(.0f, .0f, .0f, 1.f)); - context->Clear(NVRenderClearFlags(NVRenderClearValues::Color | NVRenderClearValues::Depth)); - - success &= scalarTest(context, pUserData); - _curTest++; - success &= vectorTest(context, pUserData); - _curTest++; - success &= structTest(context, pUserData); - _curTest++; - success &= rawTest(context, pUserData); - _curTest++; - success &= multiCBTest(context, pUserData); - _curTest++; - - // cleanup - context->SetViewport(NVRenderRect(0, 0, pUserData->winWidth, pUserData->winHeight)); - - return success; -} - -bool NVRenderTestConstantBuffer::scalarTest(NVRenderContext *context, userContextData *pUserData) -{ - static const Vertex vertexPositions[] = { { QT3DSVec3(-0.9, 0.9, 0) }, { QT3DSVec3(-0.9, -0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, { QT3DSVec3(-0.9, 0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, { QT3DSVec3(0.9, 0.9, 0) } }; - - NVScopedRefCounted<NVRenderVertexBuffer> mVertexBuffer; - NVScopedRefCounted<NVRenderAttribLayout> mAttribLayout; - NVScopedRefCounted<NVRenderInputAssembler> mInputAssembler; - NVScopedRefCounted<NVRenderIndexBuffer> mIndexBuffer; - NVScopedRefCounted<NVRenderConstantBuffer> mConstantBuffer; - QT3DSMat44 mvp = QT3DSMat44::createIdentity(); - NvGl2DemoMatrixOrtho(&mvp, -1, 1, -1, 1, -10, 10); - - // create constant buffer referred in the program - mConstantBuffer = context->CreateConstantBuffer("cbBuffer", NVRenderBufferUsageType::Static, 0, - NVDataRef<QT3DSU8>()); - // buffer parameter. They must be in the order of appearance - CRegisteredString theRedName(context->GetStringTable().RegisterStr("red")); - mConstantBuffer->AddParam(theRedName, NVRenderShaderDataTypes::QT3DSF32, 1); - CRegisteredString theGreenName(context->GetStringTable().RegisterStr("green")); - mConstantBuffer->AddParam(theGreenName, NVRenderShaderDataTypes::QT3DSF32, 1); - CRegisteredString theMatName(context->GetStringTable().RegisterStr("mat_mvp")); - mConstantBuffer->AddParam(theMatName, NVRenderShaderDataTypes::QT3DSMat44, 1); - CRegisteredString theBlueName(context->GetStringTable().RegisterStr("blue")); - mConstantBuffer->AddParam(theBlueName, NVRenderShaderDataTypes::QT3DSF32, 1); - - // set values - QT3DSF32 red = 0.0; - mConstantBuffer->UpdateParam("red", NVDataRef<QT3DSU8>((QT3DSU8 *)&red, 1)); - QT3DSF32 green = 1.0; - mConstantBuffer->UpdateParam("green", NVDataRef<QT3DSU8>((QT3DSU8 *)&green, 1)); - QT3DSF32 blue = 0.0; - mConstantBuffer->UpdateParam("blue", NVDataRef<QT3DSU8>((QT3DSU8 *)&blue, 1)); - mConstantBuffer->UpdateParam("mat_mvp", NVDataRef<QT3DSU8>((QT3DSU8 *)mvp.front(), 1)); - - // create shaders - std::string vtxProg; - std::string frgProg; - NVRenderVertFragCompilationResult compResult = - context->CompileSource("NVRenderTestConstantBuffer::scalarTest", - toRef(scalarVertShader(isGLESContext(context), vtxProg)), - toRef(scalarFragShader(isGLESContext(context), frgProg))); - if (!compResult.mShader) { - return false; - } - - unsigned int curY = 0; - unsigned int curX = _curTest; - if (_curTest >= _maxColumn) { - curY = (_curTest / _maxColumn); - curX = (_curTest % _maxColumn); - } - - // set viewport - context->SetViewport(NVRenderRect(curX * _cellSize, curY * _cellSize, _cellSize, _cellSize)); - - // this is the layout - NVRenderVertexBufferEntry entries[] = { - NVRenderVertexBufferEntry("attr_pos", NVRenderComponentTypes::QT3DSF32, 3, 0), - }; - - QT3DSU32 bufSize = 6 * sizeof(Vertex); - NVDataRef<QT3DSU8> vertData((QT3DSU8 *)vertexPositions, bufSize); - mVertexBuffer = context->CreateVertexBuffer(NVRenderBufferUsageType::Static, bufSize, - 3 * sizeof(QT3DSF32), vertData); - if (!mVertexBuffer) { - qWarning() << "NVRenderTestConstantBuffer::scalarTest: Failed to create vertex buffer"; - return false; - } - - // create our attribute layout - mAttribLayout = context->CreateAttributeLayout(toConstDataRef(entries, 1)); - // create input Assembler - QT3DSU32 strides = mVertexBuffer->GetStride(); - QT3DSU32 offsets = 0; - mInputAssembler = context->CreateInputAssembler( - mAttribLayout, toConstDataRef(&mVertexBuffer.mPtr, 1), mIndexBuffer.mPtr, - toConstDataRef(&strides, 1), toConstDataRef(&offsets, 1)); - if (!mInputAssembler) { - qWarning() << "NVRenderTestConstantBuffer::scalarTest: Failed to create input assembler"; - return false; - } - - // make input assembler active - context->SetInputAssembler(mInputAssembler); - // set program - context->SetActiveShader(compResult.mShader); - qt3ds::render::NVRenderCachedShaderBuffer<NVRenderShaderConstantBuffer *> cb("cbBuffer", - *compResult.mShader); - mConstantBuffer->Update(); - cb.Set(); - - context->SetDepthTestEnabled(true); - context->SetDepthWriteEnabled(true); - - // draw - context->Draw(NVRenderDrawMode::Triangles, 6, 0); - - context->SetActiveShader(0); - compResult.mShader->release(); - - return true; -} - -bool NVRenderTestConstantBuffer::vectorTest(NVRenderContext *context, userContextData *pUserData) -{ - static const Vertex vertexPositions[] = { { QT3DSVec3(-0.9, 0.9, 0) }, { QT3DSVec3(-0.9, -0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, { QT3DSVec3(-0.9, 0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, { QT3DSVec3(0.9, 0.9, 0) } }; - - NVScopedRefCounted<NVRenderVertexBuffer> mVertexBuffer; - NVScopedRefCounted<NVRenderAttribLayout> mAttribLayout; - NVScopedRefCounted<NVRenderInputAssembler> mInputAssembler; - NVScopedRefCounted<NVRenderIndexBuffer> mIndexBuffer; - NVScopedRefCounted<NVRenderConstantBuffer> mConstantBuffer; - QT3DSMat44 mvp = QT3DSMat44::createIdentity(); - NvGl2DemoMatrixOrtho(&mvp, -1, 1, -1, 1, -10, 10); - - // create constant buffer referred in the program - mConstantBuffer = context->CreateConstantBuffer("cbBuffer", NVRenderBufferUsageType::Static, 0, - NVDataRef<QT3DSU8>()); - // buffer parameter. They must be in the order of appearance - CRegisteredString theRGName(context->GetStringTable().RegisterStr("rg")); - mConstantBuffer->AddParam(theRGName, NVRenderShaderDataTypes::QT3DSVec2, 1); - CRegisteredString theMatName(context->GetStringTable().RegisterStr("mat_mvp")); - mConstantBuffer->AddParam(theMatName, NVRenderShaderDataTypes::QT3DSMat44, 1); - CRegisteredString theBAName(context->GetStringTable().RegisterStr("ba")); - mConstantBuffer->AddParam(theBAName, NVRenderShaderDataTypes::QT3DSVec2, 1); - - // set values - QT3DSVec2 rg; - rg[0] = 0.0; - rg[1] = 1.0; - mConstantBuffer->UpdateParam("rg", NVDataRef<QT3DSU8>((QT3DSU8 *)&rg, 1)); - QT3DSVec2 ba; - ba[0] = 0.0; - ba[1] = 1.0; - mConstantBuffer->UpdateParam("ba", NVDataRef<QT3DSU8>((QT3DSU8 *)&ba, 1)); - mConstantBuffer->UpdateParam("mat_mvp", NVDataRef<QT3DSU8>((QT3DSU8 *)mvp.front(), 1)); - - // create shaders - std::string vtxProg; - std::string frgProg; - NVRenderVertFragCompilationResult compResult = - context->CompileSource("NVRenderTestConstantBuffer::vectorTest", - toRef(vectorVertShader(isGLESContext(context), vtxProg)), - toRef(vectorFragShader(isGLESContext(context), frgProg))); - if (!compResult.mShader) { - return false; - } - - unsigned int curY = 0; - unsigned int curX = _curTest; - if (_curTest >= _maxColumn) { - curY = (_curTest / _maxColumn); - curX = (_curTest % _maxColumn); - } - - // set viewport - context->SetViewport(NVRenderRect(curX * _cellSize, curY * _cellSize, _cellSize, _cellSize)); - - // this is the layout - NVRenderVertexBufferEntry entries[] = { - NVRenderVertexBufferEntry("attr_pos", NVRenderComponentTypes::QT3DSF32, 3, 0), - }; - - QT3DSU32 bufSize = 6 * sizeof(Vertex); - NVDataRef<QT3DSU8> vertData((QT3DSU8 *)vertexPositions, bufSize); - mVertexBuffer = context->CreateVertexBuffer(NVRenderBufferUsageType::Static, bufSize, - 3 * sizeof(QT3DSF32), vertData); - if (!mVertexBuffer) { - qWarning() << "NVRenderTestConstantBuffer::vectorTest: Failed to create vertex buffer"; - return false; - } - - // create our attribute layout - mAttribLayout = context->CreateAttributeLayout(toConstDataRef(entries, 1)); - // create input Assembler - QT3DSU32 strides = mVertexBuffer->GetStride(); - QT3DSU32 offsets = 0; - mInputAssembler = context->CreateInputAssembler( - mAttribLayout, toConstDataRef(&mVertexBuffer.mPtr, 1), mIndexBuffer.mPtr, - toConstDataRef(&strides, 1), toConstDataRef(&offsets, 1)); - if (!mInputAssembler) { - qWarning() << "NVRenderTestConstantBuffer::vectorTest: Failed to create input assembler"; - return false; - } - - // make input assembler active - context->SetInputAssembler(mInputAssembler); - // set program - context->SetActiveShader(compResult.mShader); - qt3ds::render::NVRenderCachedShaderBuffer<NVRenderShaderConstantBuffer *> cb("cbBuffer", - *compResult.mShader); - cb.Set(); - - context->SetDepthTestEnabled(true); - context->SetDepthWriteEnabled(true); - - // draw - context->Draw(NVRenderDrawMode::Triangles, 6, 0); - - context->SetActiveShader(0); - compResult.mShader->release(); - - return true; -} - -bool NVRenderTestConstantBuffer::structTest(NVRenderContext *context, userContextData *pUserData) -{ - static const Vertex vertexPositions[] = { { QT3DSVec3(-0.9, 0.9, 0) }, { QT3DSVec3(-0.9, -0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, { QT3DSVec3(-0.9, 0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, { QT3DSVec3(0.9, 0.9, 0) } }; - - NVScopedRefCounted<NVRenderVertexBuffer> mVertexBuffer; - NVScopedRefCounted<NVRenderAttribLayout> mAttribLayout; - NVScopedRefCounted<NVRenderInputAssembler> mInputAssembler; - NVScopedRefCounted<NVRenderIndexBuffer> mIndexBuffer; - NVScopedRefCounted<NVRenderConstantBuffer> mConstantBuffer; - QT3DSMat44 mvp = QT3DSMat44::createIdentity(); - NvGl2DemoMatrixOrtho(&mvp, -1, 1, -1, 1, -10, 10); - - // create constant buffer referred in the program - mConstantBuffer = context->CreateConstantBuffer("cbBuffer", NVRenderBufferUsageType::Static, 0, - NVDataRef<QT3DSU8>()); - // buffer parameter. They must be in the order of appearance - CRegisteredString theRGName(context->GetStringTable().RegisterStr("s[0].rg")); - mConstantBuffer->AddParam(theRGName, NVRenderShaderDataTypes::QT3DSVec2, 1); - CRegisteredString theMatName(context->GetStringTable().RegisterStr("s[0].mat_mvp")); - mConstantBuffer->AddParam(theMatName, NVRenderShaderDataTypes::QT3DSMat44, 1); - CRegisteredString theBlueName(context->GetStringTable().RegisterStr("s[0].blue")); - mConstantBuffer->AddParam(theBlueName, NVRenderShaderDataTypes::QT3DSF32, 1); - CRegisteredString theAlphaName(context->GetStringTable().RegisterStr("s[0].alpha")); - mConstantBuffer->AddParam(theAlphaName, NVRenderShaderDataTypes::QT3DSF32, 1); - - // set values - QT3DSVec2 rg; - rg[0] = 0.0; - rg[1] = 1.0; - mConstantBuffer->UpdateParam("s[0].rg", NVDataRef<QT3DSU8>((QT3DSU8 *)&rg, 1)); - QT3DSF32 blue, alpha; - blue = 0.0; - alpha = 1.0; - mConstantBuffer->UpdateParam("s[0].blue", NVDataRef<QT3DSU8>((QT3DSU8 *)&blue, 1)); - mConstantBuffer->UpdateParam("s[0].alpha", NVDataRef<QT3DSU8>((QT3DSU8 *)&alpha, 1)); - mConstantBuffer->UpdateParam("s[0].mat_mvp", NVDataRef<QT3DSU8>((QT3DSU8 *)mvp.front(), 1)); - - // create shaders - std::string vtxProg; - std::string frgProg; - NVRenderVertFragCompilationResult compResult = - context->CompileSource("NVRenderTestConstantBuffer::structTest", - toRef(structVertShader(isGLESContext(context), vtxProg)), - toRef(structFragShader(isGLESContext(context), frgProg))); - if (!compResult.mShader) { - return false; - } - - unsigned int curY = 0; - unsigned int curX = _curTest; - if (_curTest >= _maxColumn) { - curY = (_curTest / _maxColumn); - curX = (_curTest % _maxColumn); - } - - // set viewport - context->SetViewport(NVRenderRect(curX * _cellSize, curY * _cellSize, _cellSize, _cellSize)); - - // this is the layout - NVRenderVertexBufferEntry entries[] = { - NVRenderVertexBufferEntry("attr_pos", NVRenderComponentTypes::QT3DSF32, 3, 0), - }; - - QT3DSU32 bufSize = 6 * sizeof(Vertex); - NVDataRef<QT3DSU8> vertData((QT3DSU8 *)vertexPositions, bufSize); - mVertexBuffer = context->CreateVertexBuffer(NVRenderBufferUsageType::Static, bufSize, - 3 * sizeof(QT3DSF32), vertData); - if (!mVertexBuffer) { - qWarning() << "NVRenderTestConstantBuffer::structTest: Failed to create vertex buffer"; - return false; - } - - // create our attribute layout - mAttribLayout = context->CreateAttributeLayout(toConstDataRef(entries, 1)); - // create input Assembler - QT3DSU32 strides = mVertexBuffer->GetStride(); - QT3DSU32 offsets = 0; - mInputAssembler = context->CreateInputAssembler( - mAttribLayout, toConstDataRef(&mVertexBuffer.mPtr, 1), mIndexBuffer.mPtr, - toConstDataRef(&strides, 1), toConstDataRef(&offsets, 1)); - if (!mInputAssembler) { - qWarning() << "NVRenderTestConstantBuffer::structTest: Failed to create input assembler"; - return false; - } - - // make input assembler active - context->SetInputAssembler(mInputAssembler); - // set program - context->SetActiveShader(compResult.mShader); - qt3ds::render::NVRenderCachedShaderBuffer<NVRenderShaderConstantBuffer *> cb("cbBuffer", - *compResult.mShader); - cb.Set(); - - context->SetDepthTestEnabled(true); - context->SetDepthWriteEnabled(true); - - // draw - context->Draw(NVRenderDrawMode::Triangles, 6, 0); - - context->SetActiveShader(0); - compResult.mShader->release(); - - return true; -} - -bool NVRenderTestConstantBuffer::rawTest(NVRenderContext *context, userContextData *pUserData) -{ - static const Vertex vertexPositions[] = { { QT3DSVec3(-0.9, 0.9, 0) }, { QT3DSVec3(-0.9, -0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, { QT3DSVec3(-0.9, 0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, { QT3DSVec3(0.9, 0.9, 0) } }; - - struct sampleStruct - { - float rg[2]; - float padding[2]; - QT3DSMat44 mat_mvp; // matrices start on 16 byte boundaries - float blue; - float alpha; - } s; - - NVScopedRefCounted<NVRenderVertexBuffer> mVertexBuffer; - NVScopedRefCounted<NVRenderAttribLayout> mAttribLayout; - NVScopedRefCounted<NVRenderInputAssembler> mInputAssembler; - NVScopedRefCounted<NVRenderIndexBuffer> mIndexBuffer; - NVScopedRefCounted<NVRenderConstantBuffer> mConstantBuffer; - QT3DSMat44 mvp = QT3DSMat44::createIdentity(); - NvGl2DemoMatrixOrtho(&mvp, -1, 1, -1, 1, -10, 10); - - NVDataRef<QT3DSU8> cBuffer((QT3DSU8 *)&s, sizeof(sampleStruct)); - // create constant buffer referred in the program - mConstantBuffer = context->CreateConstantBuffer("cbBuffer", NVRenderBufferUsageType::Static, - sizeof(sampleStruct), cBuffer); - // set values - s.rg[0] = 0.0; - s.rg[1] = 1.0; - s.mat_mvp = mvp; - s.blue = 0.0; - s.alpha = 0.0; - mConstantBuffer->UpdateRaw(0, cBuffer); - - // create shaders - std::string vtxProg; - std::string frgProg; - NVRenderVertFragCompilationResult compResult = - context->CompileSource("NVRenderTestConstantBuffer::rawTest", - toRef(structVertShader(isGLESContext(context), vtxProg)), - toRef(structFragShader(isGLESContext(context), frgProg))); - if (!compResult.mShader) { - return false; - } - - unsigned int curY = 0; - unsigned int curX = _curTest; - if (_curTest >= _maxColumn) { - curY = (_curTest / _maxColumn); - curX = (_curTest % _maxColumn); - } - - // set viewport - context->SetViewport(NVRenderRect(curX * _cellSize, curY * _cellSize, _cellSize, _cellSize)); - - // this is the layout - NVRenderVertexBufferEntry entries[] = { - NVRenderVertexBufferEntry("attr_pos", NVRenderComponentTypes::QT3DSF32, 3, 0), - }; - - QT3DSU32 bufSize = 6 * sizeof(Vertex); - NVDataRef<QT3DSU8> vertData((QT3DSU8 *)vertexPositions, bufSize); - mVertexBuffer = context->CreateVertexBuffer(NVRenderBufferUsageType::Static, bufSize, - 3 * sizeof(QT3DSF32), vertData); - if (!mVertexBuffer) { - qWarning() << "NVRenderTestConstantBuffer::rawTest: Failed to create vertex buffer"; - return false; - } - - // create our attribute layout - mAttribLayout = context->CreateAttributeLayout(toConstDataRef(entries, 1)); - // create input Assembler - QT3DSU32 strides = mVertexBuffer->GetStride(); - QT3DSU32 offsets = 0; - mInputAssembler = context->CreateInputAssembler( - mAttribLayout, toConstDataRef(&mVertexBuffer.mPtr, 1), mIndexBuffer.mPtr, - toConstDataRef(&strides, 1), toConstDataRef(&offsets, 1)); - if (!mInputAssembler) { - qWarning() << "NVRenderTestConstantBuffer::rawTest: Failed to create input assembler"; - return false; - } - - // make input assembler active - context->SetInputAssembler(mInputAssembler); - // set program - context->SetActiveShader(compResult.mShader); - qt3ds::render::NVRenderCachedShaderBuffer<NVRenderShaderConstantBuffer *> cb("cbBuffer", - *compResult.mShader); - cb.Set(); - - context->SetDepthTestEnabled(true); - context->SetDepthWriteEnabled(true); - - // draw - context->Draw(NVRenderDrawMode::Triangles, 6, 0); - - context->SetActiveShader(0); - compResult.mShader->release(); - - return true; -} - -///< test of multiple constant buffers -bool NVRenderTestConstantBuffer::multiCBTest(NVRenderContext *context, userContextData *pUserData) -{ - static const Vertex vertexPositions[] = { { QT3DSVec3(-0.9, 0.9, 0) }, { QT3DSVec3(-0.9, -0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, { QT3DSVec3(-0.9, 0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, { QT3DSVec3(0.9, 0.9, 0) } }; - - NVScopedRefCounted<NVRenderVertexBuffer> mVertexBuffer; - NVScopedRefCounted<NVRenderAttribLayout> mAttribLayout; - NVScopedRefCounted<NVRenderInputAssembler> mInputAssembler; - NVScopedRefCounted<NVRenderIndexBuffer> mIndexBuffer; - NVScopedRefCounted<NVRenderConstantBuffer> mConstantBufferTrans; - NVScopedRefCounted<NVRenderConstantBuffer> mConstantBufferCol; - QT3DSMat44 mvp = QT3DSMat44::createIdentity(); - NvGl2DemoMatrixOrtho(&mvp, -1, 1, -1, 1, -10, 10); - - // create constant buffer referred in the program - mConstantBufferTrans = context->CreateConstantBuffer( - "cbBufferTrans", NVRenderBufferUsageType::Static, 0, NVDataRef<QT3DSU8>()); - // buffer parameter. They must be in the order of appearance - CRegisteredString theMatName(context->GetStringTable().RegisterStr("mat_mvp")); - mConstantBufferTrans->AddParam(theMatName, NVRenderShaderDataTypes::QT3DSMat44, 1); - - // create constant buffer referred in the program - mConstantBufferCol = context->CreateConstantBuffer( - "cbBufferCol", NVRenderBufferUsageType::Static, 0, NVDataRef<QT3DSU8>()); - CRegisteredString theRedName(context->GetStringTable().RegisterStr("red")); - mConstantBufferCol->AddParam(theRedName, NVRenderShaderDataTypes::QT3DSF32, 1); - CRegisteredString theGreenName(context->GetStringTable().RegisterStr("green")); - mConstantBufferCol->AddParam(theGreenName, NVRenderShaderDataTypes::QT3DSF32, 1); - CRegisteredString theBlueName(context->GetStringTable().RegisterStr("blue")); - mConstantBufferCol->AddParam(theBlueName, NVRenderShaderDataTypes::QT3DSF32, 1); - - // set values - mConstantBufferTrans->UpdateParam("mat_mvp", NVDataRef<QT3DSU8>((QT3DSU8 *)mvp.front(), 1)); - - QT3DSF32 red = 0.0; - mConstantBufferCol->UpdateParam("red", NVDataRef<QT3DSU8>((QT3DSU8 *)&red, 1)); - QT3DSF32 green = 1.0; - mConstantBufferCol->UpdateParam("green", NVDataRef<QT3DSU8>((QT3DSU8 *)&green, 1)); - QT3DSF32 blue = 0.0; - mConstantBufferCol->UpdateParam("blue", NVDataRef<QT3DSU8>((QT3DSU8 *)&blue, 1)); - - // create shaders - std::string vtxProg; - std::string frgProg; - NVRenderVertFragCompilationResult compResult = - context->CompileSource("NVRenderTestConstantBuffer::multiCBTest", - toRef(multiCBVertShader(isGLESContext(context), vtxProg)), - toRef(multiCBFragShader(isGLESContext(context), frgProg))); - if (!compResult.mShader) { - return false; - } - - unsigned int curY = 0; - unsigned int curX = _curTest; - if (_curTest >= _maxColumn) { - curY = (_curTest / _maxColumn); - curX = (_curTest % _maxColumn); - } - - // set viewport - context->SetViewport(NVRenderRect(curX * _cellSize, curY * _cellSize, _cellSize, _cellSize)); - - // this is the layout - NVRenderVertexBufferEntry entries[] = { - NVRenderVertexBufferEntry("attr_pos", NVRenderComponentTypes::QT3DSF32, 3, 0), - }; - - QT3DSU32 bufSize = 6 * sizeof(Vertex); - NVDataRef<QT3DSU8> vertData((QT3DSU8 *)vertexPositions, bufSize); - mVertexBuffer = context->CreateVertexBuffer(NVRenderBufferUsageType::Static, bufSize, - 3 * sizeof(QT3DSF32), vertData); - if (!mVertexBuffer) { - qWarning() << "NVRenderTestConstantBuffer::scalarTest: Failed to create vertex buffer"; - return false; - } - - // create our attribute layout - mAttribLayout = context->CreateAttributeLayout(toConstDataRef(entries, 1)); - // create input Assembler - QT3DSU32 strides = mVertexBuffer->GetStride(); - QT3DSU32 offsets = 0; - mInputAssembler = context->CreateInputAssembler( - mAttribLayout, toConstDataRef(&mVertexBuffer.mPtr, 1), mIndexBuffer.mPtr, - toConstDataRef(&strides, 1), toConstDataRef(&offsets, 1)); - if (!mInputAssembler) { - qWarning() << "NVRenderTestConstantBuffer::scalarTest: Failed to create input assembler"; - return false; - } - - // make input assembler active - context->SetInputAssembler(mInputAssembler); - // set program - context->SetActiveShader(compResult.mShader); - qt3ds::render::NVRenderCachedShaderBuffer<NVRenderShaderConstantBuffer *> cbTrans( - "cbBufferTrans", *compResult.mShader); - mConstantBufferTrans->Update(); - cbTrans.Set(); - qt3ds::render::NVRenderCachedShaderBuffer<NVRenderShaderConstantBuffer *> cbCol( - "cbBufferCol", *compResult.mShader); - mConstantBufferCol->Update(); - cbCol.Set(); - - context->SetDepthTestEnabled(true); - context->SetDepthWriteEnabled(true); - - // draw - context->Draw(NVRenderDrawMode::Triangles, 6, 0); - - context->SetActiveShader(0); - compResult.mShader->release(); - - return true; -} - -//////////////////////////////// -// performance test -//////////////////////////////// -bool NVRenderTestConstantBuffer::runPerformance(NVRenderContext *context, - userContextData *pUserData) -{ - return true; -} - -//////////////////////////////// -// test cleanup -//////////////////////////////// -void NVRenderTestConstantBuffer::cleanup(NVRenderContext *context, userContextData *pUserData) -{ - context->SetClearColor(QT3DSVec4(0.0f, .0f, .0f, 0.f)); - // dummy - context->SetViewport(NVRenderRect(0, 0, pUserData->winWidth, pUserData->winHeight)); -} diff --git a/tests/auto/runtime/base/Qt3DSRenderTestConstantBuffer.h b/tests/auto/runtime/base/Qt3DSRenderTestConstantBuffer.h deleted file mode 100644 index 417e4bb3..00000000 --- a/tests/auto/runtime/base/Qt3DSRenderTestConstantBuffer.h +++ /dev/null @@ -1,63 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2014 NVIDIA Corporation. -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef QT3DS_RENDER_TEST_CONSTANT_BUFFER_H -#define QT3DS_RENDER_TEST_CONSTANT_BUFFER_H - -#include "../Qt3DSRenderTestBase.h" - -namespace qt3ds { -namespace render { - - /// This class tests the creation of all kinds of primitives - class NVRenderTestConstantBuffer : public NVRenderTestBase - { - public: - NVRenderTestConstantBuffer(); - ~NVRenderTestConstantBuffer(); - - bool isSupported(NVRenderContext *context); - bool run(NVRenderContext *context, userContextData *pUserData); - bool runPerformance(NVRenderContext *context, userContextData *pContextData); - void cleanup(NVRenderContext *context, userContextData *pUserData); - - private: - bool scalarTest(NVRenderContext *context, userContextData *pUserData); - bool vectorTest(NVRenderContext *context, userContextData *pUserData); - bool structTest(NVRenderContext *context, userContextData *pUserData); - bool rawTest(NVRenderContext *context, userContextData *pUserData); - bool multiCBTest(NVRenderContext *context, userContextData *pUserData); - - unsigned int _curTest; - unsigned int _cellSize; - unsigned int _maxColumn; - }; -} -} - -#endif // QT3DS_RENDER_TEST_CONSTANT_BUFFER_H diff --git a/tests/auto/runtime/base/Qt3DSRenderTestDrawIndirectBuffer.cpp b/tests/auto/runtime/base/Qt3DSRenderTestDrawIndirectBuffer.cpp deleted file mode 100644 index 4b8044d3..00000000 --- a/tests/auto/runtime/base/Qt3DSRenderTestDrawIndirectBuffer.cpp +++ /dev/null @@ -1,358 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2012 NVIDIA Corporation. -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "Qt3DSRenderTestDrawIndirectBuffer.h" -#include "../Qt3DSRenderTestMathUtil.h" -#include "render/Qt3DSRenderDrawIndirectBuffer.h" -#include "render/Qt3DSRenderShaderProgram.h" - -#include <string> - -using namespace qt3ds; -using namespace qt3ds::render; - -struct Vertex -{ - QT3DSVec3 positions; -}; - -static const char *vertShader(std::string &prog, bool binESContext) -{ - if (binESContext) { - prog += "#version 310 es\n" - "precision highp float;\n" - "precision highp int;\n"; - } else { - prog += "#version 430\n"; - } - - prog += "uniform mat4 mat_mvp;\n" - "in vec3 attr_pos; // Vertex pos\n" - "void main()\n" - "{\n" - " gl_Position = vec4(attr_pos, 1.0);\n" - "}\n"; - - return prog.c_str(); -} - -static const char *fragShader(std::string &prog, bool binESContext) -{ - if (binESContext) { - prog += "#version 310 es\n" - "precision highp float;\n" - "precision highp int;\n"; - } else { - prog += "#version 430\n"; - } - - prog += "out vec4 fragColor;\n" - "void main()\n" - "{\n" - " fragColor = vec4(0.0, 1.0, 0.0, 1.0);\n" - "}\n"; - - return prog.c_str(); -} - -NVRenderTestDrawIndirectBuffer::NVRenderTestDrawIndirectBuffer() -{ - _curTest = 0; - _maxColumn = 4; -} - -NVRenderTestDrawIndirectBuffer::~NVRenderTestDrawIndirectBuffer() -{ -} - -bool NVRenderTestDrawIndirectBuffer::isSupported(NVRenderContext *context) -{ - // This is currently only supported on GL 4 and GLES 3.1 - // we have no direct check for this but this is the same version - if (!context->IsAtomicCounterBufferSupported()) - return false; - - return true; -} - -//////////////////////////////// -// test for functionality -//////////////////////////////// - -inline NVConstDataRef<QT3DSI8> toRef(const char *data) -{ - size_t len = strlen(data) + 1; - return NVConstDataRef<QT3DSI8>((const QT3DSI8 *)data, (QT3DSU32)len); -} - -bool NVRenderTestDrawIndirectBuffer::run(NVRenderContext *context, userContextData *pUserData) -{ - bool success = true; - // conpute cell width - _cellSize = pUserData->winWidth / _maxColumn; - - context->SetClearColor(QT3DSVec4(.0f, .0f, .0f, 1.f)); - context->Clear(NVRenderClearFlags(NVRenderClearValues::Color | NVRenderClearValues::Depth)); - - success &= drawArrayIndirect(context, pUserData); - _curTest++; - success &= drawElementsIndirect(context, pUserData); - _curTest++; - - // cleanup - context->SetViewport(NVRenderRect(0, 0, pUserData->winWidth, pUserData->winHeight)); - - return success; -} - -bool NVRenderTestDrawIndirectBuffer::drawArrayIndirect(NVRenderContext *context, - userContextData *pUserData) -{ - static const Vertex vertexPositions[] = { { QT3DSVec3(-0.9, -0.9, 0) }, { QT3DSVec3(0.9, 0.9, 0) }, - { QT3DSVec3(-0.9, 0.9, 0) }, { QT3DSVec3(-0.9, -0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, { QT3DSVec3(0.9, 0.9, 0) } }; - - NVScopedRefCounted<NVRenderVertexBuffer> mVertexBuffer; - NVScopedRefCounted<NVRenderAttribLayout> mAttribLayout; - NVScopedRefCounted<NVRenderInputAssembler> mInputAssembler; - NVScopedRefCounted<NVRenderDrawIndirectBuffer> mDrawIndirectBuffer; - QT3DSMat44 mvp = QT3DSMat44::createIdentity(); - NvGl2DemoMatrixOrtho(&mvp, -1, 1, -1, 1, -10, 10); - - // create shaders - std::string vtxProg; - std::string frgProg; - NVRenderVertFragCompilationResult compResult = context->CompileSource( - "NVRenderTestDrawIndirectBuffer shader", toRef(vertShader(vtxProg, isGLESContext(context))), - toRef(fragShader(frgProg, isGLESContext(context)))); - if (!compResult.mShader) { - return false; - } - - unsigned int curY = 0; - unsigned int curX = _curTest; - if (_curTest >= _maxColumn) { - curY = (_curTest / _maxColumn); - curX = (_curTest % _maxColumn); - } - - // set viewport - context->SetViewport(NVRenderRect(curX * _cellSize, curY * _cellSize, _cellSize, _cellSize)); - - // this is the layout - NVRenderVertexBufferEntry entries[] = { - NVRenderVertexBufferEntry("attr_pos", NVRenderComponentTypes::QT3DSF32, 3, 0), - }; - - QT3DSU32 bufSize = 6 * sizeof(Vertex); - NVDataRef<QT3DSU8> vertData((QT3DSU8 *)vertexPositions, bufSize); - mVertexBuffer = context->CreateVertexBuffer(NVRenderBufferUsageType::Static, bufSize, - 3 * sizeof(QT3DSF32), vertData); - if (!mVertexBuffer) { - qWarning() << "NVRenderTestAtomicCounterBuffer: Failed to create vertex buffer"; - return false; - } - - // create our attribute layout - mAttribLayout = context->CreateAttributeLayout(toConstDataRef(entries, 1)); - // create input Assembler - QT3DSU32 strides = mVertexBuffer->GetStride(); - QT3DSU32 offsets = 0; - mInputAssembler = context->CreateInputAssembler( - mAttribLayout, toConstDataRef(&mVertexBuffer.mPtr, 1), NULL, toConstDataRef(&strides, 1), - toConstDataRef(&offsets, 1), NVRenderDrawMode::Triangles); - if (!mInputAssembler) { - qWarning() << "NVRenderTestAtomicCounterBuffer: Failed to create input assembler"; - return false; - } - - // create draw indirect buffer - DrawArraysIndirectCommand command; - command.baseInstance = 0; - command.count = 6; - command.first = 0; - command.primCount = 1; - QT3DSU32 commandBufSize = sizeof(DrawArraysIndirectCommand); - NVDataRef<QT3DSU8> commandData((QT3DSU8 *)&command, commandBufSize); - mDrawIndirectBuffer = context->CreateDrawIndirectBuffer(NVRenderBufferUsageType::Dynamic, - commandBufSize, commandData); - - if (!mDrawIndirectBuffer) { - qWarning() << "NVRenderTestAtomicCounterBuffer: Failed to create vertex buffer"; - return false; - } - - // make input assembler active - context->SetInputAssembler(mInputAssembler); - // set program - context->SetActiveShader(compResult.mShader); - compResult.mShader->SetPropertyValue("mat_mvp", mvp); - - context->SetDepthTestEnabled(true); - context->SetDepthWriteEnabled(true); - - // draw - mDrawIndirectBuffer->Bind(); - context->DrawIndirect(mInputAssembler->GetPrimitiveType(), 0); - - context->SetActiveShader(0); - compResult.mShader->release(); - - return true; -} - -bool NVRenderTestDrawIndirectBuffer::drawElementsIndirect(NVRenderContext *context, - userContextData *pUserData) -{ - static const Vertex vertexPositions[] = { { QT3DSVec3(-0.9, -0.9, 0) }, { QT3DSVec3(0.9, 0.9, 0) }, - { QT3DSVec3(-0.9, 0.9, 0) }, { QT3DSVec3(-0.9, -0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, { QT3DSVec3(0.9, 0.9, 0) } }; - - const unsigned short indices[] = { 0, 1, 2, 3, 4, 5 }; - - NVScopedRefCounted<NVRenderVertexBuffer> mVertexBuffer; - NVScopedRefCounted<NVRenderIndexBuffer> mIndexBuffer; - NVScopedRefCounted<NVRenderAttribLayout> mAttribLayout; - NVScopedRefCounted<NVRenderInputAssembler> mInputAssembler; - NVScopedRefCounted<NVRenderDrawIndirectBuffer> mDrawIndirectBuffer; - QT3DSMat44 mvp = QT3DSMat44::createIdentity(); - NvGl2DemoMatrixOrtho(&mvp, -1, 1, -1, 1, -10, 10); - - // create shaders - std::string vtxProg; - std::string frgProg; - NVRenderVertFragCompilationResult compResult = context->CompileSource( - "NVRenderTestDrawIndirectBuffer shader", toRef(vertShader(vtxProg, isGLESContext(context))), - toRef(fragShader(frgProg, isGLESContext(context)))); - if (!compResult.mShader) { - return false; - } - - unsigned int curY = 0; - unsigned int curX = _curTest; - if (_curTest >= _maxColumn) { - curY = (_curTest / _maxColumn); - curX = (_curTest % _maxColumn); - } - - // set viewport - context->SetViewport(NVRenderRect(curX * _cellSize, curY * _cellSize, _cellSize, _cellSize)); - - // this is the layout - NVRenderVertexBufferEntry entries[] = { - NVRenderVertexBufferEntry("attr_pos", NVRenderComponentTypes::QT3DSF32, 3, 0), - }; - - QT3DSU32 bufSize = 6 * sizeof(Vertex); - NVDataRef<QT3DSU8> vertData((QT3DSU8 *)vertexPositions, bufSize); - mVertexBuffer = context->CreateVertexBuffer(NVRenderBufferUsageType::Static, bufSize, - 3 * sizeof(QT3DSF32), vertData); - if (!mVertexBuffer) { - qWarning() << "NVRenderTestAtomicCounterBuffer: Failed to create vertex buffer"; - return false; - } - - // index buffer - bufSize = 6 * sizeof(unsigned short); - NVDataRef<QT3DSU8> idxData((QT3DSU8 *)indices, bufSize); - mIndexBuffer = context->CreateIndexBuffer( - NVRenderBufferUsageType::Static, NVRenderComponentTypes::QT3DSU16, bufSize, - NVConstDataRef<QT3DSU8>(reinterpret_cast<const QT3DSU8 *>(indices), bufSize)); - if (!mIndexBuffer) { - qWarning() << "NVRenderTestPrimitives::Triangles: Failed to create index buffer"; - return false; - } - - // create our attribute layout - mAttribLayout = context->CreateAttributeLayout(toConstDataRef(entries, 1)); - // create input Assembler - QT3DSU32 strides = mVertexBuffer->GetStride(); - QT3DSU32 offsets = 0; - mInputAssembler = context->CreateInputAssembler( - mAttribLayout, toConstDataRef(&mVertexBuffer.mPtr, 1), mIndexBuffer, - toConstDataRef(&strides, 1), toConstDataRef(&offsets, 1), NVRenderDrawMode::Triangles); - if (!mInputAssembler) { - qWarning() << "NVRenderTestAtomicCounterBuffer: Failed to create input assembler"; - return false; - } - - // create draw indirect buffer - DrawElementsIndirectCommand command; - command.baseInstance = 0; - command.count = 6; - command.firstIndex = 0; - command.baseVertex = 0; - command.primCount = 1; - QT3DSU32 commandBufSize = sizeof(DrawElementsIndirectCommand); - NVDataRef<QT3DSU8> commandData((QT3DSU8 *)&command, commandBufSize); - mDrawIndirectBuffer = context->CreateDrawIndirectBuffer(NVRenderBufferUsageType::Dynamic, - commandBufSize, commandData); - - if (!mDrawIndirectBuffer) { - qWarning() << "NVRenderTestAtomicCounterBuffer: Failed to create vertex buffer"; - return false; - } - - // make input assembler active - context->SetInputAssembler(mInputAssembler); - // set program - context->SetActiveShader(compResult.mShader); - compResult.mShader->SetPropertyValue("mat_mvp", mvp); - - context->SetDepthTestEnabled(true); - context->SetDepthWriteEnabled(true); - - // draw - mDrawIndirectBuffer->Bind(); - context->DrawIndirect(mInputAssembler->GetPrimitiveType(), 0); - - context->SetActiveShader(0); - compResult.mShader->release(); - - return true; -} - -//////////////////////////////// -// performance test -//////////////////////////////// -bool NVRenderTestDrawIndirectBuffer::runPerformance(NVRenderContext *context, - userContextData *pUserData) -{ - return true; -} - -//////////////////////////////// -// test cleanup -//////////////////////////////// -void NVRenderTestDrawIndirectBuffer::cleanup(NVRenderContext *context, userContextData *pUserData) -{ - context->SetClearColor(QT3DSVec4(0.0f, .0f, .0f, 0.f)); - // dummy - context->SetViewport(NVRenderRect(0, 0, pUserData->winWidth, pUserData->winHeight)); -} diff --git a/tests/auto/runtime/base/Qt3DSRenderTestDrawIndirectBuffer.h b/tests/auto/runtime/base/Qt3DSRenderTestDrawIndirectBuffer.h deleted file mode 100644 index ee37a133..00000000 --- a/tests/auto/runtime/base/Qt3DSRenderTestDrawIndirectBuffer.h +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2014 NVIDIA Corporation. -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef QT3DS_RENDER_TEST_DRAW_INDIRECT_BUFFER_H -#define QT3DS_RENDER_TEST_DRAW_INDIRECT_BUFFER_H - -#include "../Qt3DSRenderTestBase.h" - -namespace qt3ds { -namespace render { - - /// This class tests the creation of all kinds of primitives - class NVRenderTestDrawIndirectBuffer : public NVRenderTestBase - { - public: - NVRenderTestDrawIndirectBuffer(); - ~NVRenderTestDrawIndirectBuffer(); - - bool isSupported(NVRenderContext *context); - bool run(NVRenderContext *context, userContextData *pUserData); - bool runPerformance(NVRenderContext *context, userContextData *pContextData); - void cleanup(NVRenderContext *context, userContextData *pUserData); - - private: - bool drawArrayIndirect(NVRenderContext *context, userContextData *pUserData); - bool drawElementsIndirect(NVRenderContext *context, userContextData *pUserData); - - unsigned int _curTest; - unsigned int _cellSize; - unsigned int _maxColumn; - }; -} -} - -#endif // QT3DS_RENDER_TEST_ATOMIC_COUNTER_BUFFER_H diff --git a/tests/auto/runtime/base/Qt3DSRenderTestPrimitives.cpp b/tests/auto/runtime/base/Qt3DSRenderTestPrimitives.cpp deleted file mode 100644 index d3c2423b..00000000 --- a/tests/auto/runtime/base/Qt3DSRenderTestPrimitives.cpp +++ /dev/null @@ -1,321 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2012 NVIDIA Corporation. -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "Qt3DSRenderTestPrimitives.h" -#include "../Qt3DSRenderTestMathUtil.h" -#include "render/Qt3DSRenderShaderProgram.h" - -using namespace qt3ds; -using namespace qt3ds::render; - -static const char *PassthroughVertShader() -{ - return "uniform mat4 mat_mvp;\n" - "attribute vec3 attr_pos; // Vertex pos\n" - "void main()\n" - "{\n" - " gl_Position = mat_mvp * vec4(attr_pos, 1.0);\n" - "}\n"; -} - -static const char *SimpleFragShader() -{ - return "#ifdef GL_ES\n" - "precision mediump float;\n" - "#endif\n" - "void main()\n" - "{\n" - "gl_FragColor = vec4(0, 1, 0, 1);\n" - "}\n"; -} - -NVRenderTestPrimitives::NVRenderTestPrimitives() -{ - _curTest = 0; - _maxColumn = 4; -} - -NVRenderTestPrimitives::~NVRenderTestPrimitives() -{ -} - -bool NVRenderTestPrimitives::isSupported(NVRenderContext *context) -{ - return true; -} - -//////////////////////////////// -// test for functionality -//////////////////////////////// - -inline NVConstDataRef<QT3DSI8> toRef(const char *data) -{ - size_t len = strlen(data) + 1; - return NVConstDataRef<QT3DSI8>((const QT3DSI8 *)data, (QT3DSU32)len); -} - -bool NVRenderTestPrimitives::renderPrimitive(NVRenderContext *context, - userContextData *pContextData, - const Vertex *pVertexData, unsigned int vertexCount, - const unsigned short *pIndexData, - unsigned int indexCount, - NVRenderDrawMode::Enum primType) -{ - NVScopedRefCounted<NVRenderVertexBuffer> mVertexBuffer; - NVScopedRefCounted<NVRenderAttribLayout> mAttribLayout; - NVScopedRefCounted<NVRenderInputAssembler> mInputAssembler; - NVScopedRefCounted<NVRenderIndexBuffer> mIndexBuffer; - QT3DSMat44 mvp = QT3DSMat44::createIdentity(); - NvGl2DemoMatrixOrtho(&mvp, -1, 1, -1, 1, -10, 10); - - // create shaders - NVRenderVertFragCompilationResult compResult = context->CompileSource( - "NVRenderTestPrimitives shader", toRef(PassthroughVertShader()), toRef(SimpleFragShader())); - if (!compResult.mShader) { - return false; - } - - unsigned int curY = 0; - unsigned int curX = _curTest; - if (_curTest >= _maxColumn) { - curY = (_curTest / _maxColumn); - curX = (_curTest % _maxColumn); - } - - // set viewport - context->SetViewport(NVRenderRect(curX * _cellSize, curY * _cellSize, _cellSize, _cellSize)); - - // this is the layout - NVRenderVertexBufferEntry entries[] = { - NVRenderVertexBufferEntry("attr_pos", NVRenderComponentTypes::QT3DSF32, 3, 0), - }; - - QT3DSU32 bufSize = vertexCount * sizeof(Vertex); - NVDataRef<QT3DSU8> vertData((QT3DSU8 *)pVertexData, bufSize); - mVertexBuffer = context->CreateVertexBuffer(NVRenderBufferUsageType::Static, bufSize, - 3 * sizeof(QT3DSF32), vertData); - if (!mVertexBuffer) { - qWarning() << "NVRenderTestPrimitives::Triangles: Failed to create vertex buffer"; - return false; - } - - // index buffer - if (pIndexData && indexCount) { - bufSize = indexCount * sizeof(unsigned short); - NVDataRef<QT3DSU8> idxData((QT3DSU8 *)pIndexData, bufSize); - mIndexBuffer = context->CreateIndexBuffer( - NVRenderBufferUsageType::Static, NVRenderComponentTypes::QT3DSU16, bufSize, - NVConstDataRef<QT3DSU8>(reinterpret_cast<const QT3DSU8 *>(pIndexData), bufSize)); - if (!mIndexBuffer) { - qWarning() << "NVRenderTestPrimitives::Triangles: Failed to create index buffer"; - return false; - } - } - - // create our attribute layout - mAttribLayout = context->CreateAttributeLayout(toConstDataRef(entries, 1)); - // create input Assembler - QT3DSU32 strides = mVertexBuffer->GetStride(); - QT3DSU32 offsets = 0; - mInputAssembler = context->CreateInputAssembler( - mAttribLayout, toConstDataRef(&mVertexBuffer.mPtr, 1), mIndexBuffer.mPtr, - toConstDataRef(&strides, 1), toConstDataRef(&offsets, 1)); - if (!mInputAssembler) { - qWarning() << "NVRenderTestPrimitives::Triangles: Failed to create inout assembler"; - return false; - } - - // make input assembler active - context->SetInputAssembler(mInputAssembler); - // set program - context->SetActiveShader(compResult.mShader); - compResult.mShader->SetPropertyValue("mat_mvp", mvp); - - context->SetDepthTestEnabled(true); - context->SetDepthWriteEnabled(true); - - // draw - QT3DSU32 count = (mIndexBuffer.mPtr) ? indexCount : vertexCount; - context->Draw(primType, count, 0); - - context->SetActiveShader(0); - compResult.mShader->release(); - - return true; -} - -bool NVRenderTestPrimitives::run(NVRenderContext *context, userContextData *pUserData) -{ - bool success = true; - // conpute cell width - _cellSize = pUserData->winWidth / _maxColumn; - - context->SetClearColor(QT3DSVec4(.0f, .0f, .0f, 1.f)); - context->Clear(NVRenderClearFlags(NVRenderClearValues::Color | NVRenderClearValues::Depth)); - - success &= triangles(context, pUserData); - _curTest++; - success &= triangleStrip(context, pUserData); - _curTest++; - success &= lines(context, pUserData); - _curTest++; - success &= lineStrip(context, pUserData); - _curTest++; - success &= trianglesIndexed(context, pUserData); - _curTest++; - success &= triangleStripIndexed(context, pUserData); - _curTest++; - success &= linesIndexed(context, pUserData); - _curTest++; - success &= lineStripIndexed(context, pUserData); - - // cleanup - context->SetViewport(NVRenderRect(0, 0, pUserData->winWidth, pUserData->winHeight)); - - return success; -} - -bool NVRenderTestPrimitives::triangles(NVRenderContext *context, userContextData *pUserData) -{ - static const Vertex vertexPositions[] = { { QT3DSVec3(-0.9, 0.9, 0) }, { QT3DSVec3(-0.9, -0.9, 0) }, - { QT3DSVec3(0.85, -0.9, 0) }, { QT3DSVec3(-0.85, 0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, { QT3DSVec3(0.9, 0.9, 0) } }; - - return renderPrimitive(context, pUserData, vertexPositions, 6, NULL, 0, - NVRenderDrawMode::Triangles); -} - -bool NVRenderTestPrimitives::triangleStrip(NVRenderContext *context, userContextData *pUserData) -{ - const Vertex vertexPositions[] = { { QT3DSVec3(-0.9, 0.9, 0.0) }, - { QT3DSVec3(-0.9f, -0.9f, 0.0f) }, - { QT3DSVec3(0.9f, 0.9f, 0.0f) }, - { QT3DSVec3(0.9f, -0.9f, 0.0f) } }; - - return renderPrimitive(context, pUserData, vertexPositions, 4, NULL, 0, - NVRenderDrawMode::TriangleStrip); -} - -bool NVRenderTestPrimitives::lines(NVRenderContext *context, userContextData *pUserData) -{ - const Vertex vertexPositions[] = { - { QT3DSVec3(0.9f, 0.9f, 0.0f) }, { QT3DSVec3(0.9f, -0.9f, 0.0f) }, - { QT3DSVec3(0.9f, -0.9f, 0.0f) }, { QT3DSVec3(-0.85f, -0.9f, 0.0f) }, - { QT3DSVec3(-0.85f, -0.9f, 0.0f) }, { QT3DSVec3(0.9f, 0.9f, 0.0f) }, - { QT3DSVec3(-0.9f, -0.9f, 0.0f) }, { QT3DSVec3(0.85f, 0.9f, 0.0f) }, - { QT3DSVec3(0.85f, 0.9f, 0.0f) }, { QT3DSVec3(-0.9f, 0.9f, 0.0f) }, - { QT3DSVec3(-0.9f, 0.9f, 0.0f) }, { QT3DSVec3(-0.9f, -0.9f, 0.0f) } - }; - - return renderPrimitive(context, pUserData, vertexPositions, 12, NULL, 0, - NVRenderDrawMode::Lines); -} - -bool NVRenderTestPrimitives::lineStrip(NVRenderContext *context, userContextData *pUserData) -{ - const Vertex vertexPositions[] = { - { QT3DSVec3(-0.9f, 0.9f, 0.0f) }, { QT3DSVec3(-0.9f, -0.9f, 0.0f) }, - { QT3DSVec3(0.9f, -0.9f, 0.0f) }, { QT3DSVec3(0.9f, 0.9f, 0.0f) }, - { QT3DSVec3(-0.9f, 0.9f, 0.0f) }, - }; - - return renderPrimitive(context, pUserData, vertexPositions, 5, NULL, 0, - NVRenderDrawMode::LineStrip); -} - -bool NVRenderTestPrimitives::trianglesIndexed(NVRenderContext *context, userContextData *pUserData) -{ - static const Vertex vertexPositions[] = { { QT3DSVec3(-0.9, 0.9, 0) }, { QT3DSVec3(-0.9, -0.9, 0) }, - { QT3DSVec3(0.85, -0.9, 0) }, { QT3DSVec3(-0.85, 0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, { QT3DSVec3(0.9, 0.9, 0) } }; - - const unsigned short indices[] = { 0, 1, 2, 3, 4, 5 }; - - return renderPrimitive(context, pUserData, vertexPositions, 6, indices, 6, - NVRenderDrawMode::Triangles); -} - -bool NVRenderTestPrimitives::triangleStripIndexed(NVRenderContext *context, - userContextData *pUserData) -{ - const Vertex vertexPositions[] = { { QT3DSVec3(-0.9, 0.9, 0.0) }, - { QT3DSVec3(-0.9f, -0.9f, 0.0f) }, - { QT3DSVec3(0.9f, 0.9f, 0.0f) }, - { QT3DSVec3(0.9f, -0.9f, 0.0f) } }; - - const unsigned short indices[] = { 0, 1, 2, 3 }; - - return renderPrimitive(context, pUserData, vertexPositions, 4, indices, 4, - NVRenderDrawMode::TriangleStrip); -} - -bool NVRenderTestPrimitives::linesIndexed(NVRenderContext *context, userContextData *pUserData) -{ - const Vertex vertexPositions[] = { - { QT3DSVec3(0.9f, 0.9f, 0.0f) }, { QT3DSVec3(0.9f, -0.9f, 0.0f) }, - { QT3DSVec3(-0.85f, -0.9f, 0.0f) }, { QT3DSVec3(-0.9f, -0.9f, 0.0f) }, - { QT3DSVec3(0.85f, 0.9f, 0.0f) }, { QT3DSVec3(-0.9f, 0.9f, 0.0f) }, - }; - - const unsigned short indices[] = { 0, 1, 1, 2, 2, 0, 3, 4, 4, 5, 5, 3 }; - - return renderPrimitive(context, pUserData, vertexPositions, 6, indices, 12, - NVRenderDrawMode::Lines); -} - -bool NVRenderTestPrimitives::lineStripIndexed(NVRenderContext *context, userContextData *pUserData) -{ - const Vertex vertexPositions[] = { { QT3DSVec3(-0.9, 0.9, 0.0) }, - { QT3DSVec3(-0.9f, -0.9f, 0.0f) }, - { QT3DSVec3(0.9f, -0.9f, 0.0f) }, - { QT3DSVec3(0.9f, 0.9f, 0.0f) } }; - - const unsigned short indices[] = { 0, 1, 2, 3, 0 }; - - return renderPrimitive(context, pUserData, vertexPositions, 4, indices, 5, - NVRenderDrawMode::LineStrip); -} - -//////////////////////////////// -// performance test -//////////////////////////////// -bool NVRenderTestPrimitives::runPerformance(NVRenderContext *context, userContextData *pUserData) -{ - return true; -} - -//////////////////////////////// -// test cleanup -//////////////////////////////// -void NVRenderTestPrimitives::cleanup(NVRenderContext *context, userContextData *pUserData) -{ - context->SetClearColor(QT3DSVec4(0.0f, .0f, .0f, 0.f)); - // dummy - context->SetViewport(NVRenderRect(0, 0, pUserData->winWidth, pUserData->winHeight)); -} diff --git a/tests/auto/runtime/base/Qt3DSRenderTestPrimitives.h b/tests/auto/runtime/base/Qt3DSRenderTestPrimitives.h deleted file mode 100644 index 4b6128e2..00000000 --- a/tests/auto/runtime/base/Qt3DSRenderTestPrimitives.h +++ /dev/null @@ -1,77 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2012 NVIDIA Corporation. -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef QT3DS_RENDER_TEST_PRIMITIVES_H -#define QT3DS_RENDER_TEST_PRIMITIVES_H - -#include "../Qt3DSRenderTestBase.h" - -namespace qt3ds { -namespace render { - - struct Vertex - { - QT3DSVec3 positions; - }; - - /// This class tests the creation of all kinds of primitives - class NVRenderTestPrimitives : public NVRenderTestBase - { - public: - NVRenderTestPrimitives(); - ~NVRenderTestPrimitives(); - - bool isSupported(NVRenderContext *context); - bool run(NVRenderContext *context, userContextData *pUserData); - bool runPerformance(NVRenderContext *context, userContextData *pContextData); - void cleanup(NVRenderContext *context, userContextData *pUserData); - - private: - bool triangles(NVRenderContext *context, userContextData *pUserData); - bool triangleStrip(NVRenderContext *context, userContextData *pUserData); - bool lines(NVRenderContext *context, userContextData *pUserData); - bool lineStrip(NVRenderContext *context, userContextData *pContextData); - - bool trianglesIndexed(NVRenderContext *context, userContextData *pUserData); - bool triangleStripIndexed(NVRenderContext *context, userContextData *pUserData); - bool linesIndexed(NVRenderContext *context, userContextData *pUserData); - bool lineStripIndexed(NVRenderContext *context, userContextData *pContextData); - - bool renderPrimitive(NVRenderContext *context, userContextData *pContextData, - const Vertex *pVertexData, unsigned int vertexCount, - const unsigned short *pIndexData, unsigned int indexCount, - NVRenderDrawMode::Enum primType); - - unsigned int _curTest; - unsigned int _cellSize; - unsigned int _maxColumn; - }; -} -} - -#endif // QT3DS_RENDER_TEST_PRIMITIVES_H diff --git a/tests/auto/runtime/base/Qt3DSRenderTestProgramPipeline.cpp b/tests/auto/runtime/base/Qt3DSRenderTestProgramPipeline.cpp deleted file mode 100644 index a76bfa05..00000000 --- a/tests/auto/runtime/base/Qt3DSRenderTestProgramPipeline.cpp +++ /dev/null @@ -1,401 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2012 NVIDIA Corporation. -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "Qt3DSRenderTestProgramPipeline.h" -#include "../Qt3DSRenderTestMathUtil.h" -#include "render/Qt3DSRenderShaderProgram.h" -#include "render/Qt3DSRenderProgramPipeline.h" - -#include <string> - -using namespace qt3ds; -using namespace qt3ds::render; - -struct Vertex -{ - QT3DSVec3 positions; -}; - -static const char *vertShader(std::string &prog, bool binESContext) -{ - if (binESContext) { - prog += "#version 310 es\n" - "precision highp float;\n" - "precision highp int;\n"; - } else { - prog += "#version 430\n"; - - prog += "out gl_PerVertex\n" - "{\n" - "\tvec4 gl_Position;\n" - "\tfloat gl_PointSize;\n" - "\tfloat gl_ClipDistance[];\n" - "};\n"; - } - - prog += "uniform mat4 mat_mvp;\n" - "in vec3 attr_pos; // Vertex pos\n" - "in vec3 attr_col; // Vertex col\n" - "out vec3 color; // output color\n" - "void main()\n" - "{\n" - " gl_Position = mat_mvp * vec4(attr_pos, 1.0);\n" - " color = attr_col;\n" - "}\n"; - - return prog.c_str(); -} - -static const char *fragShader(std::string &prog, bool binESContext) -{ - if (binESContext) { - prog += "#version 300 es\n" - "precision highp float;\n" - "precision highp int;\n"; - } else { - prog += "#version 430\n"; - } - - prog += "in vec3 color; // input color\n" - "out vec4 fragColor;\n" - "void main()\n" - "{\n" - " fragColor = vec4( color, 1.0);\n" - "}\n"; - - return prog.c_str(); -} - -NVRenderTestProgramPipeline::NVRenderTestProgramPipeline() -{ - _curTest = 0; - _maxColumn = 4; -} - -NVRenderTestProgramPipeline::~NVRenderTestProgramPipeline() -{ -} - -bool NVRenderTestProgramPipeline::isSupported(NVRenderContext *context) -{ - return context->IsProgramPipelineSupported(); -} - -//////////////////////////////// -// test for functionality -//////////////////////////////// - -inline NVConstDataRef<QT3DSI8> toRef(const char *data) -{ - size_t len = strlen(data) + 1; - return NVConstDataRef<QT3DSI8>((const QT3DSI8 *)data, (QT3DSU32)len); -} - -bool NVRenderTestProgramPipeline::run(NVRenderContext *context, userContextData *pUserData) -{ - bool success = true; - // conpute cell width - _cellSize = pUserData->winWidth / _maxColumn; - - context->SetClearColor(QT3DSVec4(.0f, .0f, .0f, 1.f)); - context->Clear(NVRenderClearFlags(NVRenderClearValues::Color | NVRenderClearValues::Depth)); - - success &= vertFragSeparateTest(context, pUserData); - _curTest++; - success &= vertFragCombinedTest(context, pUserData); - _curTest++; - - // cleanup - context->SetViewport(NVRenderRect(0, 0, pUserData->winWidth, pUserData->winHeight)); - - return success; -} - -bool NVRenderTestProgramPipeline::vertFragSeparateTest(NVRenderContext *context, - userContextData *pUserData) -{ - static const Vertex vertexPositions[] = { { QT3DSVec3(-0.9, -0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, - { QT3DSVec3(0.0, 0.9, 0) } }; - - static const Vertex vertexColors[] = { { QT3DSVec3(0.0, 1.0, 0.0) }, - { QT3DSVec3(0.0, 1.0, 0.0) }, - { QT3DSVec3(0.0, 1.0, 0.0) } }; - - NVScopedRefCounted<NVRenderVertexBuffer> mVertexBuffer; - NVScopedRefCounted<NVRenderVertexBuffer> mColorBuffer; - NVScopedRefCounted<NVRenderAttribLayout> mAttribLayout; - NVScopedRefCounted<NVRenderInputAssembler> mInputAssembler; - NVScopedRefCounted<NVRenderProgramPipeline> mProgramPipeline; - NVRenderVertexBuffer *attribBuffers[2]; - QT3DSMat44 mvp = QT3DSMat44::createIdentity(); - NvGl2DemoMatrixOrtho(&mvp, -1, 1, -1, 1, -10, 10); - qt3ds::QT3DSVec3 color(0.0, 1.0, 0.0); - - // create shaders - std::string vtxProg; - std::string frgProg; - NVRenderVertFragCompilationResult vtxResult = context->CompileSource( - "NVRenderTestProgramPipeline vertex shader", - toRef(vertShader(vtxProg, isGLESContext(context))), NVConstDataRef<QT3DSI8>(), - NVConstDataRef<QT3DSI8>(), NVConstDataRef<QT3DSI8>(), NVConstDataRef<QT3DSI8>(), true); - if (!vtxResult.mShader) { - return false; - } - - NVRenderVertFragCompilationResult fragResult = context->CompileSource( - "NVRenderTestProgramPipeline fragment shader", NVConstDataRef<QT3DSI8>(), - toRef(fragShader(frgProg, isGLESContext(context))), NVConstDataRef<QT3DSI8>(), - NVConstDataRef<QT3DSI8>(), NVConstDataRef<QT3DSI8>(), true); - - if (!fragResult.mShader) { - return false; - } - - // setup program pipeline - mProgramPipeline = context->CreateProgramPipeline(); - if (!mProgramPipeline) { - qWarning() << "NVRenderTestProgramPipeline: Failed to create program pipeline"; - return false; - } - - mProgramPipeline->SetProgramStages(vtxResult.mShader, - NVRenderShaderTypeFlags(NVRenderShaderTypeValue::Vertex)); - mProgramPipeline->SetProgramStages(fragResult.mShader, - NVRenderShaderTypeFlags(NVRenderShaderTypeValue::Fragment)); - - unsigned int curY = 0; - unsigned int curX = _curTest; - if (_curTest >= _maxColumn) { - curY = (_curTest / _maxColumn); - curX = (_curTest % _maxColumn); - } - - // set viewport - context->SetViewport(NVRenderRect(curX * _cellSize, curY * _cellSize, _cellSize, _cellSize)); - - // this is the layout - NVRenderVertexBufferEntry entries[] = { - NVRenderVertexBufferEntry("attr_pos", NVRenderComponentTypes::QT3DSF32, 3, 0, 0), - NVRenderVertexBufferEntry("attr_col", NVRenderComponentTypes::QT3DSF32, 3, 0, 1), - }; - - // position buffer - QT3DSU32 bufSize = 3 * sizeof(Vertex); - NVDataRef<QT3DSU8> vertData((QT3DSU8 *)vertexPositions, bufSize); - mVertexBuffer = context->CreateVertexBuffer(NVRenderBufferUsageType::Static, bufSize, - 3 * sizeof(QT3DSF32), vertData); - if (!mVertexBuffer) { - qWarning() << "NVRenderTestAttribBuffers: Failed to create vertex buffer"; - return false; - } - // color buffer - NVDataRef<QT3DSU8> colorData((QT3DSU8 *)vertexColors, bufSize); - mColorBuffer = context->CreateVertexBuffer(NVRenderBufferUsageType::Static, bufSize, - 3 * sizeof(QT3DSF32), colorData); - if (!mColorBuffer) { - qWarning() << "NVRenderTestAttribBuffers: Failed to create color buffer"; - return false; - } - - attribBuffers[0] = mVertexBuffer; - attribBuffers[1] = mColorBuffer; - - // create our attribute layout - mAttribLayout = context->CreateAttributeLayout(toConstDataRef(entries, 2)); - // create input Assembler - QT3DSU32 strides[2]; - QT3DSU32 offsets[2]; - strides[0] = mVertexBuffer->GetStride(); - offsets[0] = 0; - strides[1] = mColorBuffer->GetStride(); - offsets[1] = 0; - - mInputAssembler = context->CreateInputAssembler( - mAttribLayout, NVConstDataRef<NVRenderVertexBuffer *>(attribBuffers, 2), NULL, - toConstDataRef(strides, 2), toConstDataRef(offsets, 2), NVRenderDrawMode::Triangles); - if (!mInputAssembler) { - qWarning() << "NVRenderTestAttribBuffers: Failed to create input assembler"; - return false; - } - - // make input assembler active - context->SetInputAssembler(mInputAssembler); - // set program - context->SetActiveProgramPipeline(mProgramPipeline); - vtxResult.mShader->SetPropertyValue("mat_mvp", mvp); - // set color - vtxResult.mShader->SetPropertyValue("color", color); - - context->SetDepthTestEnabled(true); - context->SetDepthWriteEnabled(true); - - // draw - context->Draw(mInputAssembler->GetPrimitiveType(), 3, 0); - - context->SetActiveProgramPipeline(0); - return true; -} - -bool NVRenderTestProgramPipeline::vertFragCombinedTest(NVRenderContext *context, - userContextData *pUserData) -{ - static const Vertex vertexPositions[] = { { QT3DSVec3(-0.9, -0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, - { QT3DSVec3(0.0, 0.9, 0) } }; - - static const Vertex vertexColors[] = { { QT3DSVec3(0.0, 1.0, 0.0) }, - { QT3DSVec3(0.0, 1.0, 0.0) }, - { QT3DSVec3(0.0, 1.0, 0.0) } }; - - NVScopedRefCounted<NVRenderVertexBuffer> mVertexBuffer; - NVScopedRefCounted<NVRenderVertexBuffer> mColorBuffer; - NVScopedRefCounted<NVRenderAttribLayout> mAttribLayout; - NVScopedRefCounted<NVRenderInputAssembler> mInputAssembler; - NVScopedRefCounted<NVRenderProgramPipeline> mProgramPipeline; - NVRenderVertexBuffer *attribBuffers[2]; - QT3DSMat44 mvp = QT3DSMat44::createIdentity(); - NvGl2DemoMatrixOrtho(&mvp, -1, 1, -1, 1, -10, 10); - qt3ds::QT3DSVec3 color(0.0, 1.0, 0.0); - - // create shaders - std::string vtxProg; - std::string frgProg; - NVRenderVertFragCompilationResult compResult = context->CompileSource( - "NVRenderTestProgramPipeline vertex shader", - toRef(vertShader(vtxProg, isGLESContext(context))), - toRef(fragShader(frgProg, isGLESContext(context))), NVConstDataRef<QT3DSI8>(), - NVConstDataRef<QT3DSI8>(), NVConstDataRef<QT3DSI8>(), true); - if (!compResult.mShader) { - return false; - } - - // setup program pipeline - mProgramPipeline = context->CreateProgramPipeline(); - if (!mProgramPipeline) { - qWarning() << "NVRenderTestProgramPipeline: Failed to create program pipeline"; - return false; - } - - mProgramPipeline->SetProgramStages( - compResult.mShader, NVRenderShaderTypeFlags(NVRenderShaderTypeValue::Vertex - | NVRenderShaderTypeValue::Fragment)); - - unsigned int curY = 0; - unsigned int curX = _curTest; - if (_curTest >= _maxColumn) { - curY = (_curTest / _maxColumn); - curX = (_curTest % _maxColumn); - } - - // set viewport - context->SetViewport(NVRenderRect(curX * _cellSize, curY * _cellSize, _cellSize, _cellSize)); - - // this is the layout - NVRenderVertexBufferEntry entries[] = { - NVRenderVertexBufferEntry("attr_pos", NVRenderComponentTypes::QT3DSF32, 3, 0, 0), - NVRenderVertexBufferEntry("attr_col", NVRenderComponentTypes::QT3DSF32, 3, 0, 1), - }; - - // position buffer - QT3DSU32 bufSize = 3 * sizeof(Vertex); - NVDataRef<QT3DSU8> vertData((QT3DSU8 *)vertexPositions, bufSize); - mVertexBuffer = context->CreateVertexBuffer(NVRenderBufferUsageType::Static, bufSize, - 3 * sizeof(QT3DSF32), vertData); - if (!mVertexBuffer) { - qWarning() << "NVRenderTestAttribBuffers: Failed to create vertex buffer"; - return false; - } - // color buffer - NVDataRef<QT3DSU8> colorData((QT3DSU8 *)vertexColors, bufSize); - mColorBuffer = context->CreateVertexBuffer(NVRenderBufferUsageType::Static, bufSize, - 3 * sizeof(QT3DSF32), colorData); - if (!mColorBuffer) { - qWarning() << "NVRenderTestAttribBuffers: Failed to create color buffer"; - return false; - } - - attribBuffers[0] = mVertexBuffer; - attribBuffers[1] = mColorBuffer; - - // create our attribute layout - mAttribLayout = context->CreateAttributeLayout(toConstDataRef(entries, 2)); - // create input Assembler - QT3DSU32 strides[2]; - QT3DSU32 offsets[2]; - strides[0] = mVertexBuffer->GetStride(); - offsets[0] = 0; - strides[1] = mColorBuffer->GetStride(); - offsets[1] = 0; - - mInputAssembler = context->CreateInputAssembler( - mAttribLayout, NVConstDataRef<NVRenderVertexBuffer *>(attribBuffers, 2), NULL, - toConstDataRef(strides, 2), toConstDataRef(offsets, 2), NVRenderDrawMode::Triangles); - if (!mInputAssembler) { - qWarning() << "NVRenderTestAttribBuffers: Failed to create input assembler"; - return false; - } - - // make input assembler active - context->SetInputAssembler(mInputAssembler); - // set program - context->SetActiveProgramPipeline(mProgramPipeline); - compResult.mShader->SetPropertyValue("mat_mvp", mvp); - // set color - compResult.mShader->SetPropertyValue("color", color); - - context->SetDepthTestEnabled(true); - context->SetDepthWriteEnabled(true); - - // draw - context->Draw(mInputAssembler->GetPrimitiveType(), 3, 0); - - context->SetActiveProgramPipeline(0); - - return true; -} - -//////////////////////////////// -// performance test -//////////////////////////////// -bool NVRenderTestProgramPipeline::runPerformance(NVRenderContext *context, - userContextData *pUserData) -{ - return true; -} - -//////////////////////////////// -// test cleanup -//////////////////////////////// -void NVRenderTestProgramPipeline::cleanup(NVRenderContext *context, userContextData *pUserData) -{ - context->SetClearColor(QT3DSVec4(0.0f, .0f, .0f, 0.f)); - // dummy - context->SetViewport(NVRenderRect(0, 0, pUserData->winWidth, pUserData->winHeight)); -} diff --git a/tests/auto/runtime/base/Qt3DSRenderTestProgramPipeline.h b/tests/auto/runtime/base/Qt3DSRenderTestProgramPipeline.h deleted file mode 100644 index eeec086d..00000000 --- a/tests/auto/runtime/base/Qt3DSRenderTestProgramPipeline.h +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2014 NVIDIA Corporation. -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef QT3DS_RENDER_TEST_PROGRAM_PIPELINE_H -#define QT3DS_RENDER_TEST_PROGRAM_PIPELINE_H - -#include "../Qt3DSRenderTestBase.h" - -namespace qt3ds { -namespace render { - - /// This class tests the creation of all kinds of primitives - class NVRenderTestProgramPipeline : public NVRenderTestBase - { - public: - NVRenderTestProgramPipeline(); - ~NVRenderTestProgramPipeline(); - - bool isSupported(NVRenderContext *context); - bool run(NVRenderContext *context, userContextData *pUserData); - bool runPerformance(NVRenderContext *context, userContextData *pContextData); - void cleanup(NVRenderContext *context, userContextData *pUserData); - - private: - bool vertFragSeparateTest(NVRenderContext *context, userContextData *pUserData); - bool vertFragCombinedTest(NVRenderContext *context, userContextData *pUserData); - - unsigned int _curTest; - unsigned int _cellSize; - unsigned int _maxColumn; - }; -} -} - -#endif // QT3DS_RENDER_TEST_PROGRAM_PIPELINE_H diff --git a/tests/auto/runtime/base/Qt3DSRenderTestTexture2D.cpp b/tests/auto/runtime/base/Qt3DSRenderTestTexture2D.cpp deleted file mode 100644 index 6904955f..00000000 --- a/tests/auto/runtime/base/Qt3DSRenderTestTexture2D.cpp +++ /dev/null @@ -1,288 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2012 NVIDIA Corporation. -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "Qt3DSRenderTestTexture2D.h" -#include "../Qt3DSRenderTestMathUtil.h" -#include "render/Qt3DSRenderShaderProgram.h" -#include "render/Qt3DSRenderTexture2D.h" -#include "render/Qt3DSRenderTexture2DArray.h" - -#include <string> - -using namespace qt3ds; -using namespace qt3ds::render; - -static const char *vertShader(std::string &prog, bool binESContext) -{ - if (binESContext) { - prog += "#version 300 es\n" - "precision highp float;\n" - "precision highp int;\n"; - } else { - prog += "#version 330\n"; - } - - prog += "uniform mat4 mat_mvp;\n" - "in vec3 attr_pos; // Vertex pos\n" - "in vec3 attr_uv; // texture coord\n" - "out vec3 varTexCoord;\n" - "void main()\n" - "{\n" - " gl_Position = mat_mvp * vec4(attr_pos, 1.0);\n" - " varTexCoord = attr_uv;\n" - "}\n"; - - return prog.c_str(); -} - -static const char *fragShader(std::string &prog, bool binESContext) -{ - if (binESContext) { - prog += "#version 300 es\n" - "precision highp float;\n" - "precision highp int;\n"; - } else { - prog += "#version 330\n"; - } - - prog += "uniform sampler2DArray inTex;\n" - "in vec3 varTexCoord;\n" - "out vec4 fragColor;\n" - "void main()\n" - "{\n" - " fragColor = texture(inTex, varTexCoord);\n" - "}\n"; - - return prog.c_str(); -} - -struct Vertex -{ - QT3DSVec3 positions; - QT3DSVec3 texCoord; -}; - -static const Vertex vertexPositionsL0[] = { - { QT3DSVec3(-0.9, 0.0, 0), QT3DSVec3(0, 0, 0) }, { QT3DSVec3(0.0, 0.9, 0), QT3DSVec3(1, 1, 0) }, - { QT3DSVec3(-0.9, 0.9, 0), QT3DSVec3(0, 1, 0) }, { QT3DSVec3(-0.9, 0.0, 0), QT3DSVec3(0, 0, 0) }, - { QT3DSVec3(0.0, 0.0, 0), QT3DSVec3(1, 0, 0) }, { QT3DSVec3(0.0, 0.9, 0), QT3DSVec3(1, 1, 0) } -}; - -static const Vertex vertexPositionsL1[] = { - { QT3DSVec3(0.0, -0.9, 0), QT3DSVec3(0, 0, 1) }, { QT3DSVec3(0.9, 0.0, 0), QT3DSVec3(1, 1, 1) }, - { QT3DSVec3(0.0, 0.0, 0), QT3DSVec3(0, 1, 1) }, { QT3DSVec3(0.0, -0.9, 0), QT3DSVec3(0, 0, 1) }, - { QT3DSVec3(0.9, -0.9, 0), QT3DSVec3(1, 0, 1) }, { QT3DSVec3(0.9, 0.0, 0), QT3DSVec3(1, 1, 1) } -}; - -#define TEXTURE_LAYER_SIZE 2 -#define TEXTURE_SIZE 64 -#define PATTERN_SIZE 0x8 - -NVRenderTestTexture2D::NVRenderTestTexture2D() -{ - _curTest = 0; - _maxColumn = 4; - _pTextureData = NULL; -} - -NVRenderTestTexture2D::~NVRenderTestTexture2D() -{ -} - -bool NVRenderTestTexture2D::isSupported(NVRenderContext *context) -{ - return context->IsTextureArraySupported(); -} - -//////////////////////////////// -// test for functionality -//////////////////////////////// - -inline NVConstDataRef<QT3DSI8> toRef(const char *data) -{ - size_t len = strlen(data) + 1; - return NVConstDataRef<QT3DSI8>((const QT3DSI8 *)data, (QT3DSU32)len); -} - -bool NVRenderTestTexture2D::run(NVRenderContext *context, userContextData *pUserData) -{ - bool success = true; - // conpute cell width - _cellSize = pUserData->winWidth / _maxColumn; - - // alloc data - _pTextureData = new unsigned char[TEXTURE_SIZE * TEXTURE_SIZE * 4 * TEXTURE_LAYER_SIZE]; - CreateTexData(_pTextureData); - - context->SetClearColor(QT3DSVec4(.0f, .0f, .0f, 1.f)); - context->Clear(NVRenderClearFlags(NVRenderClearValues::Color | NVRenderClearValues::Depth)); - - success &= texArray2DTest(context, pUserData); - _curTest++; - - // cleanup - context->SetViewport(NVRenderRect(0, 0, pUserData->winWidth, pUserData->winHeight)); - - if (_pTextureData) - delete _pTextureData; - - return success; -} - -void NVRenderTestTexture2D::CreateTexData(unsigned char *_pOutData) -{ - if (!_pOutData) - return; - - unsigned char *_pData = _pOutData; - - // Create a checkerboard pattern - for (int i = 0; i < TEXTURE_LAYER_SIZE; i++) { - for (int j = 0; j < TEXTURE_SIZE; j++) { - for (int k = 0; k < TEXTURE_SIZE; k++) { - unsigned char c = (((j & PATTERN_SIZE) == 0) ^ ((k & PATTERN_SIZE) == 0)) * 255; - *_pData++ = 0x0; - *_pData++ = c >> i; - *_pData++ = 0x0; - *_pData++ = 0xFF; - } - } - } -} - -bool NVRenderTestTexture2D::renderTexArrayQuad(NVRenderContext *context, userContextData *pUserData, - NVRenderTexture2DArray *pTex, QT3DSU8 *vertexPositions) -{ - NVScopedRefCounted<NVRenderVertexBuffer> mVertexBuffer; - NVScopedRefCounted<NVRenderAttribLayout> mAttribLayout; - NVScopedRefCounted<NVRenderInputAssembler> mInputAssembler; - QT3DSMat44 mvp = QT3DSMat44::createIdentity(); - NvGl2DemoMatrixOrtho(&mvp, -1, 1, -1, 1, -10, 10); - - // create shaders - std::string vtxProg; - std::string frgProg; - NVRenderVertFragCompilationResult compResult = context->CompileSource( - "NVRenderTestTexture2D shader", toRef(vertShader(vtxProg, isGLESContext(context))), - toRef(fragShader(frgProg, isGLESContext(context)))); - if (!compResult.mShader) { - return false; - } - - unsigned int curY = 0; - unsigned int curX = _curTest; - if (_curTest >= _maxColumn) { - curY = (_curTest / _maxColumn); - curX = (_curTest % _maxColumn); - } - - // set viewport - context->SetViewport(NVRenderRect(curX * _cellSize, curY * _cellSize, _cellSize, _cellSize)); - - // this is the layout - NVRenderVertexBufferEntry entries[] = { - NVRenderVertexBufferEntry("attr_pos", NVRenderComponentTypes::QT3DSF32, 3, 0), - NVRenderVertexBufferEntry("attr_uv", NVRenderComponentTypes::QT3DSF32, 3, 12), - }; - - QT3DSU32 bufSize = 6 * sizeof(Vertex); - NVDataRef<QT3DSU8> vertData(vertexPositions, bufSize); - mVertexBuffer = context->CreateVertexBuffer(NVRenderBufferUsageType::Static, bufSize, - 6 * sizeof(QT3DSF32), vertData); - if (!mVertexBuffer) { - qWarning() << "NVRenderTestTexture2D: Failed to create vertex buffer"; - return false; - } - - // create our attribute layout - mAttribLayout = context->CreateAttributeLayout(toConstDataRef(entries, 2)); - // create input Assembler - QT3DSU32 strides = mVertexBuffer->GetStride(); - QT3DSU32 offsets = 0; - mInputAssembler = - context->CreateInputAssembler(mAttribLayout, toConstDataRef(&mVertexBuffer.mPtr, 1), NULL, - toConstDataRef(&strides, 1), toConstDataRef(&offsets, 1)); - if (!mInputAssembler) { - qWarning() << "NVRenderTestTexture2D: Failed to create input assembler"; - return false; - } - - // make input assembler active - context->SetInputAssembler(mInputAssembler); - // set program - context->SetActiveShader(compResult.mShader); - NVRenderCachedShaderProperty<NVRenderTexture2DArray *> mArrayTexture("inTex", - *compResult.mShader); - mArrayTexture.Set(pTex); - compResult.mShader->SetPropertyValue("mat_mvp", mvp); - context->SetDepthTestEnabled(true); - context->SetDepthWriteEnabled(true); - - // draw - context->Draw(NVRenderDrawMode::Triangles, 6, 0); - - context->SetActiveShader(0); - compResult.mShader->release(); - - return true; -} - -bool NVRenderTestTexture2D::texArray2DTest(NVRenderContext *context, userContextData *pUserData) -{ - bool success = true; - // create texture - NVScopedRefCounted<NVRenderTexture2DArray> mArrayTexture; - mArrayTexture = context->CreateTexture2DArray(); - mArrayTexture->SetTextureData( - NVDataRef<QT3DSU8>(_pTextureData, TEXTURE_SIZE * TEXTURE_SIZE * 4 * TEXTURE_LAYER_SIZE), 0, - TEXTURE_SIZE, TEXTURE_SIZE, TEXTURE_LAYER_SIZE, NVRenderTextureFormats::RGBA8); - - success &= renderTexArrayQuad(context, pUserData, mArrayTexture, (QT3DSU8 *)vertexPositionsL0); - success &= renderTexArrayQuad(context, pUserData, mArrayTexture, (QT3DSU8 *)vertexPositionsL1); - - return success; -} - -//////////////////////////////// -// performance test -//////////////////////////////// -bool NVRenderTestTexture2D::runPerformance(NVRenderContext *context, userContextData *pUserData) -{ - return true; -} - -//////////////////////////////// -// test cleanup -//////////////////////////////// -void NVRenderTestTexture2D::cleanup(NVRenderContext *context, userContextData *pUserData) -{ - context->SetClearColor(QT3DSVec4(0.0f, .0f, .0f, 0.f)); - // dummy - context->SetViewport(NVRenderRect(0, 0, pUserData->winWidth, pUserData->winHeight)); -} diff --git a/tests/auto/runtime/base/Qt3DSRenderTestTexture2D.h b/tests/auto/runtime/base/Qt3DSRenderTestTexture2D.h deleted file mode 100644 index 5c5de114..00000000 --- a/tests/auto/runtime/base/Qt3DSRenderTestTexture2D.h +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2014 NVIDIA Corporation. -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef QT3DS_RENDER_TEST_TEXTURE_2D_H -#define QT3DS_RENDER_TEST_TEXTURE_2D_H - -#include "../Qt3DSRenderTestBase.h" - -namespace qt3ds { -namespace render { - - class NVRenderTexture2D; - class NVRenderTexture2DArray; - - /// This class tests the creation of all kinds of primitives - class NVRenderTestTexture2D : public NVRenderTestBase - { - public: - NVRenderTestTexture2D(); - ~NVRenderTestTexture2D(); - - bool isSupported(NVRenderContext *context); - bool run(NVRenderContext *context, userContextData *pUserData); - bool runPerformance(NVRenderContext *context, userContextData *pContextData); - void cleanup(NVRenderContext *context, userContextData *pUserData); - - private: - bool texArray2DTest(NVRenderContext *context, userContextData *pUserData); - - bool renderTexArrayQuad(NVRenderContext *context, userContextData *pUserData, - NVRenderTexture2DArray *pTex, QT3DSU8 *vertexPositions); - void CreateTexData(unsigned char *_pOutData); - - unsigned int _curTest; - unsigned int _cellSize; - unsigned int _maxColumn; - unsigned char *_pTextureData; - }; -} -} - -#endif // QT3DS_RENDER_TEST_TEXTURE_2D_H diff --git a/tests/auto/runtime/base/Qt3DSRenderTestTimerQuery.cpp b/tests/auto/runtime/base/Qt3DSRenderTestTimerQuery.cpp deleted file mode 100644 index bf8ff0e3..00000000 --- a/tests/auto/runtime/base/Qt3DSRenderTestTimerQuery.cpp +++ /dev/null @@ -1,436 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2012 NVIDIA Corporation. -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "Qt3DSRenderTestTimerQuery.h" -#include "../Qt3DSRenderTestMathUtil.h" -#include "render/Qt3DSRenderShaderProgram.h" -#include "render/Qt3DSRenderTimerQuery.h" - -#include <string> - -using namespace qt3ds; -using namespace qt3ds::render; - -static const char *vertShader(std::string &prog, bool binESContext) -{ - if (binESContext) { - prog += "#version 300 es\n" - "precision highp float;\n" - "precision highp int;\n"; - } else { - prog += "#version 330\n"; - } - - prog += "uniform mat4 mat_mvp;\n" - "in vec3 attr_pos; // Vertex pos\n" - "void main()\n" - "{\n" - " gl_Position = mat_mvp * vec4(attr_pos, 1.0);\n" - "}\n"; - - return prog.c_str(); -} - -static const char *fragShader(std::string &prog, bool binESContext) -{ - if (binESContext) { - prog += "#version 300 es\n" - "precision highp float;\n" - "precision highp int;\n"; - } else { - prog += "#version 330\n"; - } - - prog += "uniform vec3 color;\n" - "out vec4 fragColor;\n" - "void main()\n" - "{\n" - " fragColor = vec4(color, 1.0);\n" - "}\n"; - - return prog.c_str(); -} - -struct Vertex -{ - QT3DSVec3 positions; -}; - -static const Vertex vertexPositions[] = { { QT3DSVec3(-0.9, 0.9, 0) }, { QT3DSVec3(-0.9, -0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, { QT3DSVec3(-0.9, 0.9, 0) }, - { QT3DSVec3(0.9, -0.9, 0) }, { QT3DSVec3(0.9, 0.9, 0) } }; - -NVRenderTestTimerQuery::NVRenderTestTimerQuery() -{ - _curTest = 0; - _maxColumn = 4; -} - -NVRenderTestTimerQuery::~NVRenderTestTimerQuery() -{ -} - -bool NVRenderTestTimerQuery::isSupported(NVRenderContext *context) -{ - return context->IsTimerQuerySupported(); -} - -//////////////////////////////// -// test for functionality -//////////////////////////////// - -inline NVConstDataRef<QT3DSI8> toRef(const char *data) -{ - size_t len = strlen(data) + 1; - return NVConstDataRef<QT3DSI8>((const QT3DSI8 *)data, (QT3DSU32)len); -} - -bool NVRenderTestTimerQuery::run(NVRenderContext *context, userContextData *pUserData) -{ - bool success = true; - // conpute cell width - _cellSize = pUserData->winWidth / _maxColumn; - - context->SetClearColor(QT3DSVec4(.0f, .0f, .0f, 1.f)); - context->Clear(NVRenderClearFlags(NVRenderClearValues::Color | NVRenderClearValues::Depth)); - - success &= timerTest(context, pUserData); - _curTest++; - success &= absoluteTimerTest(context, pUserData); - _curTest++; - - // cleanup - context->SetViewport(NVRenderRect(0, 0, pUserData->winWidth, pUserData->winHeight)); - - return success; -} - -bool NVRenderTestTimerQuery::renderQuad(NVRenderContext *context, userContextData *pUserData, - QT3DSVec3 color) -{ - NVScopedRefCounted<NVRenderVertexBuffer> mVertexBuffer; - NVScopedRefCounted<NVRenderAttribLayout> mAttribLayout; - NVScopedRefCounted<NVRenderInputAssembler> mInputAssembler; - QT3DSMat44 mvp = QT3DSMat44::createIdentity(); - NvGl2DemoMatrixOrtho(&mvp, -1, 1, -1, 1, -10, 10); - - // create shaders - std::string vtxProg; - std::string frgProg; - NVRenderVertFragCompilationResult compResult = context->CompileSource( - "NVRenderTestTimerQuery shader", toRef(vertShader(vtxProg, isGLESContext(context))), - toRef(fragShader(frgProg, isGLESContext(context)))); - if (!compResult.mShader) { - return false; - } - - unsigned int curY = 0; - unsigned int curX = _curTest; - if (_curTest >= _maxColumn) { - curY = (_curTest / _maxColumn); - curX = (_curTest % _maxColumn); - } - - // set viewport - context->SetViewport(NVRenderRect(curX * _cellSize, curY * _cellSize, _cellSize, _cellSize)); - - // this is the layout - NVRenderVertexBufferEntry entries[] = { - NVRenderVertexBufferEntry("attr_pos", NVRenderComponentTypes::QT3DSF32, 3, 0), - }; - - QT3DSU32 bufSize = 6 * sizeof(Vertex); - NVDataRef<QT3DSU8> vertData((QT3DSU8 *)vertexPositions, bufSize); - mVertexBuffer = context->CreateVertexBuffer(NVRenderBufferUsageType::Static, bufSize, - 3 * sizeof(QT3DSF32), vertData); - if (!mVertexBuffer) { - qWarning() << "NVRenderTestTimerQuery: Failed to create vertex buffer"; - return false; - } - - // create our attribute layout - mAttribLayout = context->CreateAttributeLayout(toConstDataRef(entries, 1)); - // create input Assembler - QT3DSU32 strides = mVertexBuffer->GetStride(); - QT3DSU32 offsets = 0; - mInputAssembler = - context->CreateInputAssembler(mAttribLayout, toConstDataRef(&mVertexBuffer.mPtr, 1), NULL, - toConstDataRef(&strides, 1), toConstDataRef(&offsets, 1)); - if (!mInputAssembler) { - qWarning() << "NVRenderTestTimerQuery: Failed to create input assembler"; - return false; - } - - // make input assembler active - context->SetInputAssembler(mInputAssembler); - // set program - context->SetActiveShader(compResult.mShader); - compResult.mShader->SetPropertyValue("mat_mvp", mvp); - // set color - compResult.mShader->SetPropertyValue("color", color); - - context->SetDepthTestEnabled(true); - context->SetDepthWriteEnabled(true); - - // draw - context->Draw(NVRenderDrawMode::Triangles, 6, 0); - - context->SetActiveShader(0); - compResult.mShader->release(); - - return true; -} - -bool NVRenderTestTimerQuery::timerTest(NVRenderContext *context, userContextData *pUserData) -{ - NVScopedRefCounted<NVRenderVertexBuffer> mVertexBuffer; - NVScopedRefCounted<NVRenderAttribLayout> mAttribLayout; - NVScopedRefCounted<NVRenderInputAssembler> mInputAssembler; - QT3DSMat44 mvp = QT3DSMat44::createIdentity(); - QT3DSMat44 proj = QT3DSMat44::createIdentity(); - NvGl2DemoMatrixOrtho(&proj, -1, 1, -1, 1, -10, 10); - QT3DSVec3 color(1.0, 1.0, 0.0); - - // create shaders - std::string vtxProg; - std::string frgProg; - NVRenderVertFragCompilationResult compResult = context->CompileSource( - "NVRenderTestTimerQuery shader", toRef(vertShader(vtxProg, isGLESContext(context))), - toRef(fragShader(frgProg, isGLESContext(context)))); - if (!compResult.mShader) { - return false; - } - - unsigned int curY = 0; - unsigned int curX = _curTest; - if (_curTest >= _maxColumn) { - curY = (_curTest / _maxColumn); - curX = (_curTest % _maxColumn); - } - - // set viewport - context->SetViewport(NVRenderRect(curX * _cellSize, curY * _cellSize, _cellSize, _cellSize)); - - // this is the layout - NVRenderVertexBufferEntry entries[] = { - NVRenderVertexBufferEntry("attr_pos", NVRenderComponentTypes::QT3DSF32, 3, 0), - }; - - QT3DSU32 bufSize = 6 * sizeof(Vertex); - NVDataRef<QT3DSU8> vertData((QT3DSU8 *)vertexPositions, bufSize); - mVertexBuffer = context->CreateVertexBuffer(NVRenderBufferUsageType::Static, bufSize, - 3 * sizeof(QT3DSF32), vertData); - if (!mVertexBuffer) { - qWarning() << "NVRenderTestTimerQuery: Failed to create vertex buffer"; - return false; - } - - // create our attribute layout - mAttribLayout = context->CreateAttributeLayout(toConstDataRef(entries, 1)); - // create input Assembler - QT3DSU32 strides = mVertexBuffer->GetStride(); - QT3DSU32 offsets = 0; - mInputAssembler = - context->CreateInputAssembler(mAttribLayout, toConstDataRef(&mVertexBuffer.mPtr, 1), NULL, - toConstDataRef(&strides, 1), toConstDataRef(&offsets, 1)); - if (!mInputAssembler) { - qWarning() << "NVRenderTestTimerQuery: Failed to create input assembler"; - return false; - } - - // make input assembler active - context->SetInputAssembler(mInputAssembler); - - // setup translation - QT3DSMat44 transZ; - NvRenderTestMatrixTranslation(&transZ, 0.0, 0.0, 0.2); - mvp = transZ * proj; - - // set program - context->SetActiveShader(compResult.mShader); - compResult.mShader->SetPropertyValue("mat_mvp", mvp); - // set color - compResult.mShader->SetPropertyValue("color", color); - - context->SetDepthTestEnabled(true); - context->SetDepthWriteEnabled(true); - - NVScopedRefCounted<NVRenderTimerQuery> pQuery = context->CreateTimerQuery(); - - // render 1000 quads this should take at least some amount of time - pQuery->Begin(); - for (QT3DSI32 i = 0; i < 1000; i++) { - context->Draw(NVRenderDrawMode::Triangles, 6, 0); - } - pQuery->End(); - - // get elapsed time in nano seconds - QT3DSU64 result = 0; - pQuery->GetResult(&result); - // convert to milli second - QT3DSF64 elapsed = double(result) / 1e06; - - /// it should take at least a fraction of a milli second - if (elapsed > 0.0) - color.x = 0.0; // right - else - color.y = 0.0; // wrong - - context->SetActiveShader(0); - compResult.mShader->release(); - - renderQuad(context, pUserData, color); - - return (elapsed > 0.0); -} - -bool NVRenderTestTimerQuery::absoluteTimerTest(NVRenderContext *context, userContextData *pUserData) -{ - NVScopedRefCounted<NVRenderVertexBuffer> mVertexBuffer; - NVScopedRefCounted<NVRenderAttribLayout> mAttribLayout; - NVScopedRefCounted<NVRenderInputAssembler> mInputAssembler; - QT3DSMat44 mvp = QT3DSMat44::createIdentity(); - QT3DSMat44 proj = QT3DSMat44::createIdentity(); - NvGl2DemoMatrixOrtho(&proj, -1, 1, -1, 1, -10, 10); - QT3DSVec3 color(1.0, 1.0, 0.0); - - // create shaders - std::string vtxProg; - std::string frgProg; - NVRenderVertFragCompilationResult compResult = context->CompileSource( - "NVRenderTestTimerQuery shader", toRef(vertShader(vtxProg, isGLESContext(context))), - toRef(fragShader(frgProg, isGLESContext(context)))); - if (!compResult.mShader) { - return false; - } - - unsigned int curY = 0; - unsigned int curX = _curTest; - if (_curTest >= _maxColumn) { - curY = (_curTest / _maxColumn); - curX = (_curTest % _maxColumn); - } - - // set viewport - context->SetViewport(NVRenderRect(curX * _cellSize, curY * _cellSize, _cellSize, _cellSize)); - - // this is the layout - NVRenderVertexBufferEntry entries[] = { - NVRenderVertexBufferEntry("attr_pos", NVRenderComponentTypes::QT3DSF32, 3, 0), - }; - - QT3DSU32 bufSize = 6 * sizeof(Vertex); - NVDataRef<QT3DSU8> vertData((QT3DSU8 *)vertexPositions, bufSize); - mVertexBuffer = context->CreateVertexBuffer(NVRenderBufferUsageType::Static, bufSize, - 3 * sizeof(QT3DSF32), vertData); - if (!mVertexBuffer) { - qWarning() << "NVRenderTestTimerQuery: Failed to create vertex buffer"; - return false; - } - - // create our attribute layout - mAttribLayout = context->CreateAttributeLayout(toConstDataRef(entries, 1)); - // create input Assembler - QT3DSU32 strides = mVertexBuffer->GetStride(); - QT3DSU32 offsets = 0; - mInputAssembler = - context->CreateInputAssembler(mAttribLayout, toConstDataRef(&mVertexBuffer.mPtr, 1), NULL, - toConstDataRef(&strides, 1), toConstDataRef(&offsets, 1)); - if (!mInputAssembler) { - qWarning() << "NVRenderTestTimerQuery: Failed to create input assembler"; - return false; - } - - // make input assembler active - context->SetInputAssembler(mInputAssembler); - - // setup translation - QT3DSMat44 transZ; - NvRenderTestMatrixTranslation(&transZ, 0.0, 0.0, 0.2); - mvp = transZ * proj; - - // set program - context->SetActiveShader(compResult.mShader); - compResult.mShader->SetPropertyValue("mat_mvp", mvp); - // set color - compResult.mShader->SetPropertyValue("color", color); - - context->SetDepthTestEnabled(true); - context->SetDepthWriteEnabled(true); - - NVScopedRefCounted<NVRenderTimerQuery> pQueryStart = context->CreateTimerQuery(); - NVScopedRefCounted<NVRenderTimerQuery> pQueryEnd = context->CreateTimerQuery(); - - // render 1000 quads this should take at least some amount of time - pQueryStart->SetTimerQuery(); - for (QT3DSI32 i = 0; i < 1000; i++) { - context->Draw(NVRenderDrawMode::Triangles, 6, 0); - } - pQueryEnd->SetTimerQuery(); - - // get absolute time in nano seconds - QT3DSU64 start = 0; - pQueryStart->GetResult(&start); - QT3DSU64 end = 0; - pQueryEnd->GetResult(&end); - - // convert to milli second - QT3DSF64 elapsed = double(end - start) / 1e06; - - // it should take at least a fraction of a milli second - if (elapsed > 0.0) - color.x = 0.0; // right - else - color.y = 0.0; // wrong - - context->SetActiveShader(0); - compResult.mShader->release(); - - renderQuad(context, pUserData, color); - - return (elapsed > 0.0); -} - -//////////////////////////////// -// performance test -//////////////////////////////// -bool NVRenderTestTimerQuery::runPerformance(NVRenderContext *context, userContextData *pUserData) -{ - return true; -} - -//////////////////////////////// -// test cleanup -//////////////////////////////// -void NVRenderTestTimerQuery::cleanup(NVRenderContext *context, userContextData *pUserData) -{ - context->SetClearColor(QT3DSVec4(0.0f, .0f, .0f, 0.f)); - // dummy - context->SetViewport(NVRenderRect(0, 0, pUserData->winWidth, pUserData->winHeight)); -} diff --git a/tests/auto/runtime/base/Qt3DSRenderTestTimerQuery.h b/tests/auto/runtime/base/Qt3DSRenderTestTimerQuery.h deleted file mode 100644 index 127c25fc..00000000 --- a/tests/auto/runtime/base/Qt3DSRenderTestTimerQuery.h +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2008-2014 NVIDIA Corporation. -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef QT3DS_RENDER_TEST_TIMER_QUERY_H -#define QT3DS_RENDER_TEST_TIMER_QUERY_H - -#include "../Qt3DSRenderTestBase.h" - -namespace qt3ds { -namespace render { - - class NVRenderTimerQuery; - - /// This class tests the creation of all kinds of primitives - class NVRenderTestTimerQuery : public NVRenderTestBase - { - public: - NVRenderTestTimerQuery(); - ~NVRenderTestTimerQuery(); - - bool isSupported(NVRenderContext *context); - bool run(NVRenderContext *context, userContextData *pUserData); - bool runPerformance(NVRenderContext *context, userContextData *pContextData); - void cleanup(NVRenderContext *context, userContextData *pUserData); - - private: - bool timerTest(NVRenderContext *context, userContextData *pUserData); - bool absoluteTimerTest(NVRenderContext *context, userContextData *pUserData); - - bool renderQuad(NVRenderContext *context, userContextData *pUserData, QT3DSVec3 color); - - unsigned int _curTest; - unsigned int _cellSize; - unsigned int _maxColumn; - }; -} -} - -#endif // QT3DS_RENDER_TEST_TIMER_QUERY_H |