summaryrefslogtreecommitdiffstats
path: root/Graphics/GraphicsEngineVulkan
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2018-04-14 18:04:53 +0000
committerEgor Yusov <egor.yusov@gmail.com>2018-04-14 18:04:53 +0000
commita509e890a55eade6b10a36563f35219b61bf2707 (patch)
tree33da45d394e57b9afbeae90e78bcedbafdd320c3 /Graphics/GraphicsEngineVulkan
parentImplemented input vertex layout conversion in Vulkan (diff)
downloadDiligentCore-a509e890a55eade6b10a36563f35219b61bf2707.tar.gz
DiligentCore-a509e890a55eade6b10a36563f35219b61bf2707.zip
Moved primitive topology from draw attribs to pipeline state desc
Diffstat (limited to 'Graphics/GraphicsEngineVulkan')
-rw-r--r--Graphics/GraphicsEngineVulkan/include/VulkanTypeConversions.h4
-rw-r--r--Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp45
-rw-r--r--Graphics/GraphicsEngineVulkan/src/VulkanTypeConversions.cpp33
3 files changed, 43 insertions, 39 deletions
diff --git a/Graphics/GraphicsEngineVulkan/include/VulkanTypeConversions.h b/Graphics/GraphicsEngineVulkan/include/VulkanTypeConversions.h
index b8da039e..f5b2859c 100644
--- a/Graphics/GraphicsEngineVulkan/include/VulkanTypeConversions.h
+++ b/Graphics/GraphicsEngineVulkan/include/VulkanTypeConversions.h
@@ -48,6 +48,10 @@ void InputLayoutDesc_To_VkVertexInputStateCI(const InputLayoutDesc& LayoutDesc,
std::array<VkVertexInputBindingDescription, iMaxLayoutElements>& BindingDescriptions,
std::array<VkVertexInputAttributeDescription, iMaxLayoutElements>& AttributeDescription);
+void PrimitiveTopology_To_VkPrimitiveTopologyAndPatchCPCount(PRIMITIVE_TOPOLOGY PrimTopology,
+ VkPrimitiveTopology &VkPrimTopology,
+ uint32_t &PatchControlPoints);
+
#if 0
D3D12_COMPARISON_FUNC ComparisonFuncToD3D12ComparisonFunc(COMPARISON_FUNCTION Func);
D3D12_FILTER FilterTypeToD3D12Filter(FILTER_TYPE MinFilter, FILTER_TYPE MagFilter, FILTER_TYPE MipFilter);
diff --git a/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp
index ab7d01f3..8751616d 100644
--- a/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp
@@ -35,33 +35,6 @@
namespace Diligent
{
/*
-Vk_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType_To_Vk_PRIMITIVE_TOPOLOGY_TYPE( PRIMITIVE_TOPOLOGY_TYPE TopologyType )
-{
- static bool bIsInit = false;
- static Vk_PRIMITIVE_TOPOLOGY_TYPE VkTopologyType[PRIMITIVE_TOPOLOGY_TYPE_NUM_TYPES] = {};
- if( !bIsInit )
- {
- VkTopologyType[ PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED] = Vk_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED;
- VkTopologyType[ PRIMITIVE_TOPOLOGY_TYPE_POINT ] = Vk_PRIMITIVE_TOPOLOGY_TYPE_POINT;
- VkTopologyType[ PRIMITIVE_TOPOLOGY_TYPE_LINE ] = Vk_PRIMITIVE_TOPOLOGY_TYPE_LINE;
- VkTopologyType[ PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE ] = Vk_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;
- VkTopologyType[ PRIMITIVE_TOPOLOGY_TYPE_PATCH ] = Vk_PRIMITIVE_TOPOLOGY_TYPE_PATCH;
-
- bIsInit = true;
- }
-
- if( TopologyType >= PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED && TopologyType < PRIMITIVE_TOPOLOGY_TYPE_NUM_TYPES )
- {
- auto VkTopType = VkTopologyType[TopologyType];
- return VkTopType;
- }
- else
- {
- UNEXPECTED( "Incorrect topology type operation (", TopologyType, ")" );
- return static_cast<Vk_PRIMITIVE_TOPOLOGY_TYPE>(0);
- }
-}
-
void PipelineStateVkImpl::ParseShaderResourceLayout(IShader *pShader)
{
VERIFY_EXPR(pShader);
@@ -266,23 +239,17 @@ PipelineStateVkImpl :: PipelineStateVkImpl(IReferenceCounters *pRefCounters, Ren
VkPipelineInputAssemblyStateCreateInfo InputAssemblyCI = {};
InputAssemblyCI.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;
InputAssemblyCI.pNext = nullptr;
- InputAssemblyCI.flags;
- InputAssemblyCI.topology;
+ InputAssemblyCI.flags = 0; // reserved for future use
InputAssemblyCI.primitiveRestartEnable = VK_FALSE;
PipelineCI.pInputAssemblyState = &InputAssemblyCI;
VkPipelineTessellationStateCreateInfo TessStateCI = {};
- if(GraphicsPipeline.pHS != nullptr && GraphicsPipeline.pDS)
- {
- TessStateCI.sType = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO;
- TessStateCI.pNext = nullptr;
- TessStateCI.flags;
- TessStateCI.patchControlPoints;
+ TessStateCI.sType = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO;
+ TessStateCI.pNext = nullptr;
+ TessStateCI.flags = 0; // reserved for future use
+ PipelineCI.pTessellationState = &TessStateCI;
- PipelineCI.pTessellationState = &TessStateCI;
- }
- else
- PipelineCI.pTessellationState = nullptr;
+ PrimitiveTopology_To_VkPrimitiveTopologyAndPatchCPCount(GraphicsPipeline.PrimitiveTopology, InputAssemblyCI.topology, TessStateCI.patchControlPoints);
VkPipelineViewportStateCreateInfo ViewPortStateCI = {};
diff --git a/Graphics/GraphicsEngineVulkan/src/VulkanTypeConversions.cpp b/Graphics/GraphicsEngineVulkan/src/VulkanTypeConversions.cpp
index 943e520e..a9a7392d 100644
--- a/Graphics/GraphicsEngineVulkan/src/VulkanTypeConversions.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/VulkanTypeConversions.cpp
@@ -967,6 +967,39 @@ void InputLayoutDesc_To_VkVertexInputStateCI(const InputLayoutDesc& LayoutDesc,
}
+void PrimitiveTopology_To_VkPrimitiveTopologyAndPatchCPCount(PRIMITIVE_TOPOLOGY PrimTopology,
+ VkPrimitiveTopology &VkPrimTopology,
+ uint32_t &PatchControlPoints)
+{
+ PatchControlPoints = 0;
+ switch(PrimTopology)
+ {
+ case PRIMITIVE_TOPOLOGY_UNDEFINED:
+ UNEXPECTED("Undefined primitive topology");
+ VkPrimTopology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
+ return;
+
+ case PRIMITIVE_TOPOLOGY_TRIANGLE_LIST:
+ VkPrimTopology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
+ return;
+
+ case PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP:
+ VkPrimTopology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP;
+ return;
+
+ case PRIMITIVE_TOPOLOGY_POINT_LIST:
+ VkPrimTopology = VK_PRIMITIVE_TOPOLOGY_POINT_LIST;
+ return;
+
+ case PRIMITIVE_TOPOLOGY_LINE_LIST:
+ VkPrimTopology = VK_PRIMITIVE_TOPOLOGY_LINE_LIST;
+ return;
+ }
+
+ VERIFY_EXPR(PrimTopology >= PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST && PrimTopology < PRIMITIVE_TOPOLOGY_NUM_TOPOLOGIES);
+ VkPrimTopology = VK_PRIMITIVE_TOPOLOGY_PATCH_LIST;
+ PatchControlPoints = static_cast<uint32_t>(VkPrimTopology) - static_cast<uint32_t>(PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST) + 1;
+}
#if 0
D3D12_COMPARISON_FUNC ComparisonFuncToD3D12ComparisonFunc(COMPARISON_FUNCTION Func)