tests: Make depthStencil an object in Render Framework
diff --git a/tests/render_tests.cpp b/tests/render_tests.cpp
index 5683ea2..eb1efd8 100644
--- a/tests/render_tests.cpp
+++ b/tests/render_tests.cpp
@@ -229,11 +229,6 @@
XGL_GPU_MEMORY m_textureMem;
XGL_SAMPLER m_sampler;
-
- XGL_IMAGE m_depthStencilImage;
- uint32_t m_num_mem;
- XGL_GPU_MEMORY *m_depthStencilMem;
- XGL_DEPTH_STENCIL_VIEW m_depthStencilView;
XglMemoryRefManager m_memoryRefManager;
@@ -249,7 +244,6 @@
memset(&m_textureViewInfo, 0, sizeof(m_textureViewInfo));
m_textureViewInfo.sType = XGL_STRUCTURE_TYPE_IMAGE_VIEW_ATTACH_INFO;
- memset(&m_depthStencilImage, 0, sizeof(m_depthStencilImage));
InitFramework();
}
@@ -291,8 +285,14 @@
void XglRenderTest::GenericDrawPreparation(XglCommandBufferObj *cmdBuffer, XglPipelineObj *pipelineobj, XglDescriptorSetObj *descriptorSet)
{
- cmdBuffer->ClearAllBuffers(m_clear_color, m_depth_clear_color, m_stencil_clear_color,
- &m_depthStencilBinding, m_depthStencilImage);
+ if (m_depthStencil->Initialized()) {
+ cmdBuffer->ClearAllBuffers(m_clear_color, m_depth_clear_color, m_stencil_clear_color,
+ m_depthStencil->BindInfo(), m_depthStencil->obj());
+ } else {
+ cmdBuffer->ClearAllBuffers(m_clear_color, m_depth_clear_color, m_stencil_clear_color,
+ NULL, NULL);
+ }
+
cmdBuffer->PrepareAttachments();
cmdBuffer->BindStateObject(XGL_STATE_BIND_RASTER, m_stateRaster);
cmdBuffer->BindStateObject(XGL_STATE_BIND_VIEWPORT, m_stateViewport);
@@ -355,116 +355,6 @@
fflush(stdout);
}
-void XglRenderTest::InitDepthStencil()
-{
- XGL_RESULT err;
- XGL_IMAGE_CREATE_INFO image;
- XGL_MEMORY_ALLOC_INFO mem_alloc;
- XGL_MEMORY_ALLOC_IMAGE_INFO img_alloc;
- XGL_DEPTH_STENCIL_VIEW_CREATE_INFO view;
- XGL_MEMORY_REQUIREMENTS *mem_reqs;
- size_t mem_reqs_size=sizeof(XGL_MEMORY_REQUIREMENTS);
- XGL_IMAGE_MEMORY_REQUIREMENTS img_reqs;
- size_t img_reqs_size = sizeof(XGL_IMAGE_MEMORY_REQUIREMENTS);
- uint32_t num_allocations = 0;
- size_t num_alloc_size = sizeof(num_allocations);
-
- // Clean up default state created by framework
- if (m_stateDepthStencil) xglDestroyObject(m_stateDepthStencil);
-
- m_depth_stencil_fmt = XGL_FMT_D16_UNORM;
-
- image.sType = XGL_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
- image.pNext = NULL;
- image.imageType = XGL_IMAGE_2D;
- image.format = m_depth_stencil_fmt;
- image.extent.width = m_width;
- image.extent.height = m_height;
- image.extent.depth = 1;
- image.mipLevels = 1;
- image.arraySize = 1;
- image.samples = 1;
- image.tiling = XGL_OPTIMAL_TILING;
- image.usage = XGL_IMAGE_USAGE_DEPTH_STENCIL_BIT;
- image.flags = 0;
-
- img_alloc.sType = XGL_STRUCTURE_TYPE_MEMORY_ALLOC_IMAGE_INFO;
- img_alloc.pNext = NULL;
- mem_alloc.sType = XGL_STRUCTURE_TYPE_MEMORY_ALLOC_INFO;
- mem_alloc.pNext = &img_alloc;
- mem_alloc.allocationSize = 0;
- mem_alloc.memProps = XGL_MEMORY_PROPERTY_GPU_ONLY;
- mem_alloc.memType = XGL_MEMORY_TYPE_IMAGE;
- mem_alloc.memPriority = XGL_MEMORY_PRIORITY_NORMAL;
-
- /* create image */
- err = xglCreateImage(device(), &image,
- &m_depthStencilImage);
- ASSERT_XGL_SUCCESS(err);
-
- err = xglGetObjectInfo(m_depthStencilImage,
- XGL_INFO_TYPE_MEMORY_ALLOCATION_COUNT,
- &num_alloc_size, &num_allocations);
- ASSERT_XGL_SUCCESS(err);
- ASSERT_EQ(num_alloc_size, sizeof(num_allocations));
- mem_reqs = (XGL_MEMORY_REQUIREMENTS *) malloc(num_allocations * sizeof(XGL_MEMORY_REQUIREMENTS));
- m_depthStencilMem = (XGL_GPU_MEMORY *) malloc(num_allocations * sizeof(XGL_GPU_MEMORY));
- m_num_mem = num_allocations;
- err = xglGetObjectInfo(m_depthStencilImage,
- XGL_INFO_TYPE_MEMORY_REQUIREMENTS,
- &mem_reqs_size, mem_reqs);
- ASSERT_XGL_SUCCESS(err);
- ASSERT_EQ(mem_reqs_size, sizeof(*mem_reqs));
- err = xglGetObjectInfo(m_depthStencilImage,
- XGL_INFO_TYPE_IMAGE_MEMORY_REQUIREMENTS,
- &img_reqs_size, &img_reqs);
- ASSERT_XGL_SUCCESS(err);
- ASSERT_EQ(img_reqs_size, sizeof(XGL_IMAGE_MEMORY_REQUIREMENTS));
- img_alloc.usage = img_reqs.usage;
- img_alloc.formatClass = img_reqs.formatClass;
- img_alloc.samples = img_reqs.samples;
- for (uint32_t i = 0; i < num_allocations; i ++) {
- mem_alloc.allocationSize = mem_reqs[i].size;
-
- /* allocate memory */
- err = xglAllocMemory(device(), &mem_alloc, &m_depthStencilMem[i]);
- ASSERT_XGL_SUCCESS(err);
-
- /* bind memory */
- err = xglBindObjectMemory(m_depthStencilImage, i,
- m_depthStencilMem[i], 0);
- ASSERT_XGL_SUCCESS(err);
- }
-
- XGL_DYNAMIC_DS_STATE_CREATE_INFO depthStencil = {};
- depthStencil.sType = XGL_STRUCTURE_TYPE_DYNAMIC_DS_STATE_CREATE_INFO;
-
- depthStencil.minDepth = 0.f;
- depthStencil.maxDepth = 1.f;
- depthStencil.stencilBackRef = 0;
- depthStencil.stencilFrontRef = 0;
- depthStencil.stencilReadMask = 0xff;
- depthStencil.stencilWriteMask = 0xff;
-
- err = xglCreateDynamicDepthStencilState( device(), &depthStencil, &m_stateDepthStencil );
- ASSERT_XGL_SUCCESS( err );
-
- /* create image view */
- view.sType = XGL_STRUCTURE_TYPE_DEPTH_STENCIL_VIEW_CREATE_INFO;
- view.pNext = NULL;
- view.image = XGL_NULL_HANDLE;
- view.mipLevel = 0;
- view.baseArraySlice = 0;
- view.arraySize = 1;
- view.flags = 0;
- view.image = m_depthStencilImage;
- err = xglCreateDepthStencilView(device(), &view, &m_depthStencilView);
- ASSERT_XGL_SUCCESS(err);
-
- m_depthStencilBinding.view = m_depthStencilView;
- m_depthStencilBinding.layout = XGL_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
-}
-
struct xgltriangle_vs_uniform {
// Must start with MVP
float mvp[4][4];
@@ -1813,7 +1703,7 @@
ASSERT_NO_FATAL_FAILURE(InitState());
ASSERT_NO_FATAL_FAILURE(InitViewport());
- ASSERT_NO_FATAL_FAILURE(InitDepthStencil());
+ m_depthStencil->Init(m_device, m_width, m_height);
XglConstantBufferObj meshBuffer(m_device,sizeof(g_vb_solid_face_colors_Data)/sizeof(g_vb_solid_face_colors_Data[0]),
sizeof(g_vb_solid_face_colors_Data[0]), g_vb_solid_face_colors_Data);
@@ -1847,7 +1737,7 @@
m_memoryRefManager.AddMemoryRef(&meshBuffer);
m_memoryRefManager.AddMemoryRef(&MVPBuffer);
- m_memoryRefManager.AddMemoryRef(m_depthStencilMem, m_num_mem);
+ m_memoryRefManager.AddMemoryRef(m_depthStencil);
XGL_VERTEX_INPUT_BINDING_DESCRIPTION vi_binding = {
sizeof(g_vbData[0]), // strideInBytes; Distance between vertices in bytes (0 = no advancement)
@@ -1867,8 +1757,9 @@
pipelineobj.AddVertexInputAttribs(vi_attribs,2);
pipelineobj.AddVertexDataBuffer(&meshBuffer,0);
- ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
+ ASSERT_NO_FATAL_FAILURE(InitRenderTarget(m_depthStencil->BindInfo()));
m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
+
XglCommandBufferObj cmdBuffer(m_device);
cmdBuffer.AddRenderTarget(m_renderTargets[0]);
@@ -2619,7 +2510,7 @@
ASSERT_NO_FATAL_FAILURE(InitState());
ASSERT_NO_FATAL_FAILURE(InitViewport());
- ASSERT_NO_FATAL_FAILURE(InitDepthStencil());
+ m_depthStencil->Init(m_device, m_width, m_height);
XglConstantBufferObj meshBuffer(m_device,sizeof(g_vb_solid_face_colors_Data)/sizeof(g_vb_solid_face_colors_Data[0]),
sizeof(g_vb_solid_face_colors_Data[0]), g_vb_solid_face_colors_Data);
@@ -2645,7 +2536,7 @@
m_memoryRefManager.AddMemoryRef(&meshBuffer);
m_memoryRefManager.AddMemoryRef(&mvpBuffer);
m_memoryRefManager.AddMemoryRef(&texture);
- m_memoryRefManager.AddMemoryRef(m_depthStencilMem, m_num_mem);
+ m_memoryRefManager.AddMemoryRef(m_depthStencil);
XGL_VERTEX_INPUT_BINDING_DESCRIPTION vi_binding = {
sizeof(g_vbData[0]), // strideInBytes; Distance between vertices in bytes (0 = no advancement)
@@ -2679,7 +2570,7 @@
ds_state.front = ds_state.back;
pipelineobj.SetDepthStencil(&ds_state);
- ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
+ ASSERT_NO_FATAL_FAILURE(InitRenderTarget(m_depthStencil->BindInfo()));
m_memoryRefManager.AddRTMemoryRefs(m_renderTargets, m_renderTargets.size());
XglCommandBufferObj cmdBuffer(m_device);
cmdBuffer.AddRenderTarget(m_renderTargets[0]);