tests: Add another class to help implementing tests
diff --git a/tests/xglrenderframework.h b/tests/xglrenderframework.h
new file mode 100644
index 0000000..127d582
--- /dev/null
+++ b/tests/xglrenderframework.h
@@ -0,0 +1,116 @@
+/*
+ * XGL Tests
+ *
+ * Copyright (C) 2014 LunarG, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Authors:
+ * Courtney Goeltzenleuchter <courtney@lunarg.com>
+ */
+
+#ifndef XGLRENDERFRAMEWORK_H
+#define XGLRENDERFRAMEWORK_H
+
+#include "xgltestframework.h"
+
+class XglRenderFramework : public XglTestFramework
+{
+public:
+ XglRenderFramework();
+ ~XglRenderFramework();
+
+ void CreateQueryPool(XGL_QUERY_TYPE type, XGL_UINT slots,
+ XGL_QUERY_POOL *pPool, XGL_GPU_MEMORY *pMem);
+ void DestroyQueryPool(XGL_QUERY_POOL pool, XGL_GPU_MEMORY mem);
+
+ XGL_DEVICE device() {return m_device->device();}
+ void CreateShader(XGL_PIPELINE_SHADER_STAGE stage, const char *shader_code, XGL_SHADER *pshader);
+ void InitPipeline();
+ void InitMesh( XGL_UINT32 numVertices, XGL_GPU_SIZE vbStride, const void* vertices );
+ void InitConstantBuffer( int constantCount, int constantSize, const void* data );
+ void InitViewport(float width, float height);
+ void InitRenderTarget();
+ void InitFramework();
+ void CreateDefaultPipeline(XGL_PIPELINE* pipeline, XGL_SHADER* vs, XGL_SHADER* ps);
+ void GenerateClearAndPrepareBufferCmds(XglImage *renderTarget);
+ void GenerateBindRenderTargetCmd(XglImage *renderTarget);
+ void GenerateBindStateAndPipelineCmds(XGL_PIPELINE* pipeline);
+
+protected:
+ XGL_APPLICATION_INFO app_info;
+ XGL_PHYSICAL_GPU objs[MAX_GPUS];
+ XGL_UINT gpu_count;
+ XGL_GPU_MEMORY m_descriptor_set_mem;
+ XGL_GPU_MEMORY m_pipe_mem;
+ XglDevice *m_device;
+ XGL_CMD_BUFFER m_cmdBuffer;
+ XGL_UINT32 m_numVertices;
+ XGL_MEMORY_VIEW_ATTACH_INFO m_vtxBufferView;
+ XGL_MEMORY_VIEW_ATTACH_INFO m_constantBufferView;
+ XGL_GPU_MEMORY m_vtxBufferMem;
+ XGL_GPU_MEMORY m_constantBufferMem;
+ XGL_UINT32 m_numMemRefs;
+ XGL_MEMORY_REF m_memRefs[5];
+ XGL_RASTER_STATE_OBJECT m_stateRaster;
+ XGL_COLOR_BLEND_STATE_OBJECT m_colorBlend;
+ XGL_VIEWPORT_STATE_OBJECT m_stateViewport;
+ XGL_DEPTH_STENCIL_STATE_OBJECT m_stateDepthStencil;
+ XGL_MSAA_STATE_OBJECT m_stateMsaa;
+ XGL_DESCRIPTOR_SET m_rsrcDescSet;
+ XglImage *m_renderTarget;
+ XGL_FLOAT m_width, m_height;
+ XGL_FORMAT m_render_target_fmt;
+
+ /*
+ * SetUp and TearDown are called by the Google Test framework
+ * to initialize a test framework based on this class.
+ */
+ virtual void SetUp() {
+ XGL_RESULT err;
+
+ this->app_info.sType = XGL_STRUCTURE_TYPE_APPLICATION_INFO;
+ this->app_info.pNext = NULL;
+ this->app_info.pAppName = (const XGL_CHAR *) "base";
+ this->app_info.appVersion = 1;
+ this->app_info.pEngineName = (const XGL_CHAR *) "unittest";
+ this->app_info.engineVersion = 1;
+ this->app_info.apiVersion = XGL_MAKE_VERSION(0, 22, 0);
+
+ memset(&m_vtxBufferView, 0, sizeof(m_vtxBufferView));
+ m_vtxBufferView.sType = XGL_STRUCTURE_TYPE_MEMORY_VIEW_ATTACH_INFO;
+
+ memset(&m_constantBufferView, 0, sizeof(m_constantBufferView));
+ m_constantBufferView.sType = XGL_STRUCTURE_TYPE_MEMORY_VIEW_ATTACH_INFO;
+
+ err = xglInitAndEnumerateGpus(&app_info, NULL,
+ MAX_GPUS, &this->gpu_count, objs);
+ ASSERT_XGL_SUCCESS(err);
+ ASSERT_GE(1, this->gpu_count) << "No GPU available";
+
+ m_device = new XglDevice(0, objs[0]);
+ m_device->get_device_queue();
+ }
+
+ virtual void TearDown() {
+ xglInitAndEnumerateGpus(&this->app_info, XGL_NULL_HANDLE, 0, &gpu_count, XGL_NULL_HANDLE);
+ }
+};
+
+#endif // XGLRENDERFRAMEWORK_H