From e43a31bfbe4fa5fdf60fc174f975ef51b4b0a3a7 Mon Sep 17 00:00:00 2001 From: turanszkij Date: Sat, 14 Apr 2018 16:54:02 +0100 Subject: [PATCH] removed some vulkan warnings --- WickedEngine/wiGraphicsDevice.cpp | 3 +- WickedEngine/wiGraphicsDevice_Vulkan.cpp | 115 +++++++++++++++++++---- WickedEngine/wiRenderer.cpp | 25 +++-- 3 files changed, 119 insertions(+), 24 deletions(-) diff --git a/WickedEngine/wiGraphicsDevice.cpp b/WickedEngine/wiGraphicsDevice.cpp index 26c84ba83..47b8278e5 100644 --- a/WickedEngine/wiGraphicsDevice.cpp +++ b/WickedEngine/wiGraphicsDevice.cpp @@ -3,7 +3,8 @@ using namespace wiGraphicsTypes; //FORMAT GraphicsDevice::BACKBUFFER_FORMAT = FORMAT::FORMAT_R8G8B8A8_UNORM; -FORMAT GraphicsDevice::BACKBUFFER_FORMAT = FORMAT::FORMAT_R10G10B10A2_UNORM; +FORMAT GraphicsDevice::BACKBUFFER_FORMAT = FORMAT::FORMAT_B8G8R8A8_UNORM; // this is compliant with vulkan, dx11, dx12 +//FORMAT GraphicsDevice::BACKBUFFER_FORMAT = FORMAT::FORMAT_R10G10B10A2_UNORM; FORMAT GraphicsDevice::GetBackBufferFormat() { diff --git a/WickedEngine/wiGraphicsDevice_Vulkan.cpp b/WickedEngine/wiGraphicsDevice_Vulkan.cpp index 6e7fe6b0a..0f022969c 100644 --- a/WickedEngine/wiGraphicsDevice_Vulkan.cpp +++ b/WickedEngine/wiGraphicsDevice_Vulkan.cpp @@ -1137,6 +1137,39 @@ namespace wiGraphicsTypes } return VK_FORMAT_UNDEFINED; } + inline VkCompareOp _ConvertComparisonFunc(COMPARISON_FUNC value) + { + switch (value) + { + case COMPARISON_NEVER: + return VK_COMPARE_OP_NEVER; + break; + case COMPARISON_LESS: + return VK_COMPARE_OP_LESS; + break; + case COMPARISON_EQUAL: + return VK_COMPARE_OP_EQUAL; + break; + case COMPARISON_LESS_EQUAL: + return VK_COMPARE_OP_LESS_OR_EQUAL; + break; + case COMPARISON_GREATER: + return VK_COMPARE_OP_GREATER; + break; + case COMPARISON_NOT_EQUAL: + return VK_COMPARE_OP_NOT_EQUAL; + break; + case COMPARISON_GREATER_EQUAL: + return VK_COMPARE_OP_GREATER_OR_EQUAL; + break; + case COMPARISON_ALWAYS: + return VK_COMPARE_OP_ALWAYS; + break; + default: + break; + } + return VK_COMPARE_OP_NEVER; + } // Engine functions @@ -1917,20 +1950,6 @@ namespace wiGraphicsTypes // Initiate first commands: for (int threadID = 0; threadID < GRAPHICSTHREAD_COUNT; ++threadID) { - VkClearValue clearColor = { (FRAMECOUNT % 256) / 255.0f, 0.0f, 0.0f, 1.0f }; - - VkRenderPassBeginInfo renderPassInfo = {}; - renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; - renderPassInfo.renderPass = defaultRenderPass; - renderPassInfo.framebuffer = GetFrameResources().swapChainFramebuffer; - renderPassInfo.renderArea.offset = { 0, 0 }; - renderPassInfo.renderArea.extent = swapChainExtent; - renderPassInfo.clearValueCount = 1; - renderPassInfo.pClearValues = &clearColor; - - // Begin presentation render pass... - vkCmdBeginRenderPass(GetDirectCommandList(static_cast(threadID)), &renderPassInfo, VK_SUBPASS_CONTENTS_INLINE); - VkRect2D scissors[8]; for (int i = 0; i < ARRAYSIZE(scissors); ++i) { @@ -2808,6 +2827,7 @@ namespace wiGraphicsTypes { depthstencil.depthTestEnable = pDesc->dss->desc.DepthEnable ? 1 : 0; depthstencil.depthWriteEnable = pDesc->dss->desc.DepthWriteMask != DEPTH_WRITE_MASK_ZERO; + depthstencil.depthCompareOp = _ConvertComparisonFunc(pDesc->dss->desc.DepthFunc); depthstencil.stencilTestEnable = pDesc->dss->desc.StencilEnable ? 1 : 0; } @@ -2980,6 +3000,7 @@ namespace wiGraphicsTypes vkCmdEndRenderPass(GetDirectCommandList(GRAPHICSTHREAD_IMMEDIATE)); } renderPassActive[GRAPHICSTHREAD_IMMEDIATE] = true; + renderPassDirty[GRAPHICSTHREAD_IMMEDIATE] = false; VkClearValue clearColor = { (FRAMECOUNT % 256) / 255.0f, 0.0f, 0.0f, 1.0f }; @@ -3308,13 +3329,13 @@ namespace wiGraphicsTypes voffsets[i] = offsets[i]; } } - vkCmdBindVertexBuffers(GetDirectCommandList(threadID), static_cast(slot), static_cast(count), vbuffers, voffsets); + //vkCmdBindVertexBuffers(GetDirectCommandList(threadID), static_cast(slot), static_cast(count), vbuffers, voffsets); } void GraphicsDevice_Vulkan::BindIndexBuffer(GPUBuffer* indexBuffer, const INDEXBUFFER_FORMAT format, UINT offset, GRAPHICSTHREAD threadID) { if (indexBuffer != nullptr) { - vkCmdBindIndexBuffer(GetDirectCommandList(threadID), static_cast(indexBuffer->resource_Vulkan), offset, format == INDEXFORMAT_16BIT ? VK_INDEX_TYPE_UINT16 : VK_INDEX_TYPE_UINT32); + //vkCmdBindIndexBuffer(GetDirectCommandList(threadID), static_cast(indexBuffer->resource_Vulkan), offset, format == INDEXFORMAT_16BIT ? VK_INDEX_TYPE_UINT16 : VK_INDEX_TYPE_UINT32); } } void GraphicsDevice_Vulkan::BindPrimitiveTopology(PRIMITIVETOPOLOGY type, GRAPHICSTHREAD threadID) @@ -3467,6 +3488,47 @@ namespace wiGraphicsTypes // TODO: realloc on wrap or something + + + + //VkBufferMemoryBarrier barrier = {}; + //barrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER; + //barrier.buffer = static_cast(buffer->resource_Vulkan); + //barrier.srcAccessMask = 0; + //if (buffer->desc.BindFlags & BIND_CONSTANT_BUFFER) + //{ + // barrier.srcAccessMask = VK_ACCESS_UNIFORM_READ_BIT; + //} + //else if (buffer->desc.BindFlags & BIND_VERTEX_BUFFER) + //{ + // barrier.srcAccessMask = VK_ACCESS_INDEX_READ_BIT; + //} + //else if (buffer->desc.BindFlags & BIND_INDEX_BUFFER) + //{ + // barrier.srcAccessMask = VK_ACCESS_INDEX_READ_BIT; + //} + //else + //{ + // barrier.srcAccessMask = VK_ACCESS_SHADER_READ_BIT; + //} + //barrier.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + + //vkCmdPipelineBarrier( + // GetDirectCommandList(threadID), + // VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, + // VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, + // VK_DEPENDENCY_BY_REGION_BIT, + // 0, nullptr, + // 1, &barrier, + // 0, nullptr + //); + + + + + + + // provide immediate buffer allocation address and issue deferred data copy: uint8_t* dest = GetFrameResources().resourceBuffer[threadID]->allocate(dataSize, 4); @@ -3481,6 +3543,25 @@ namespace wiGraphicsTypes + + + //VkAccessFlags tmp = barrier.srcAccessMask; + //barrier.srcAccessMask = barrier.dstAccessMask; + //barrier.dstAccessMask = tmp; + + //vkCmdPipelineBarrier( + // GetDirectCommandList(threadID), + // VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, + // VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, + // VK_DEPENDENCY_BY_REGION_BIT, + // 0, nullptr, + // 1, &barrier, + // 0, nullptr + //); + + + + // Thread safety is compromised! buffer->byteOffset = position + dataSize; buffer->residentFrame = FRAMECOUNT; @@ -3544,7 +3625,7 @@ namespace wiGraphicsTypes //barrier.subresourceRange.baseMipLevel = 0; //barrier.subresourceRange.levelCount = 1; //vkCmdPipelineBarrier( - // GetDirectCommandList(GRAPHICSTHREAD_IMMEDIATE), + // GetDirectCommandList(threadID), // VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, // VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, // VK_DEPENDENCY_BY_REGION_BIT, diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index 2cd2fa6ea..602670c44 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -1592,13 +1592,27 @@ void wiRenderer::LoadShaders() desc.DSFormat = DSFormat_full; break; case SHADERTYPE_FORWARD: - desc.numRTs = 2; + if (transparency) + { + desc.numRTs = 1; + } + else + { + desc.numRTs = 2; + } desc.RTFormats[0] = RTFormat_hdr; desc.RTFormats[1] = RTFormat_gbuffer_1; desc.DSFormat = DSFormat_full; break; case SHADERTYPE_TILEDFORWARD: - desc.numRTs = 2; + if (transparency) + { + desc.numRTs = 1; + } + else + { + desc.numRTs = 2; + } desc.RTFormats[0] = RTFormat_hdr; desc.RTFormats[1] = RTFormat_gbuffer_1; desc.DSFormat = DSFormat_full; @@ -1698,9 +1712,8 @@ void wiRenderer::LoadShaders() desc.dss = depthStencils[DSSTYPE_DEFAULT]; desc.il = vertexLayouts[VLTYPE_OBJECT_POS_TEX]; - desc.numRTs = 2; + desc.numRTs = 1; desc.RTFormats[0] = RTFormat_hdr; - desc.RTFormats[1] = RTFormat_gbuffer_1; desc.DSFormat = DSFormat_full; desc.ps = pixelShaders[PSTYPE_OBJECT_FORWARD_WATER]; @@ -1743,9 +1756,9 @@ void wiRenderer::LoadShaders() desc.bs = blendStates[BSTYPE_DECAL]; desc.dss = depthStencils[DSSTYPE_DECAL]; - desc.numRTs = 2; + desc.numRTs = 1; desc.RTFormats[0] = RTFormat_gbuffer_0; - desc.RTFormats[1] = RTFormat_gbuffer_1; + //desc.RTFormats[1] = RTFormat_gbuffer_1; RECREATE(PSO_decal); device->CreateGraphicsPSO(&desc, PSO_decal);