removed some vulkan warnings

This commit is contained in:
turanszkij
2018-04-14 16:54:02 +01:00
parent 33bd25affb
commit e43a31bfbe
3 changed files with 119 additions and 24 deletions
+2 -1
View File
@@ -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()
{
+98 -17
View File
@@ -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<GRAPHICSTHREAD>(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<uint32_t>(slot), static_cast<uint32_t>(count), vbuffers, voffsets);
//vkCmdBindVertexBuffers(GetDirectCommandList(threadID), static_cast<uint32_t>(slot), static_cast<uint32_t>(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<VkBuffer>(indexBuffer->resource_Vulkan), offset, format == INDEXFORMAT_16BIT ? VK_INDEX_TYPE_UINT16 : VK_INDEX_TYPE_UINT32);
//vkCmdBindIndexBuffer(GetDirectCommandList(threadID), static_cast<VkBuffer>(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<VkBuffer>(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,
+19 -6
View File
@@ -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);