diff options
author | Dave Airlie <[email protected]> | 2017-02-13 07:30:29 +0000 |
---|---|---|
committer | Dave Airlie <[email protected]> | 2017-02-14 20:29:19 +0000 |
commit | 3360dbe0c1ebeead9046955b3de4dcdf86cfbb40 (patch) | |
tree | eb90b19485798402d238b6df8897175ac85c533d /src/amd/vulkan/radv_pipeline.c | |
parent | a465eae38fbf5f95170a73009e646daca2aa5181 (diff) |
radv: fixup IA_MULTI_VGT_PARAM handling.
This ports the remains of the workarounds from radeonsi for
the non-TESS cases. It should provide equivalent workarounds
for hawaii and bonarie.
Reviewed-by: Bas Nieuwenhuizen <[email protected]>
Signed-off-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/amd/vulkan/radv_pipeline.c')
-rw-r--r-- | src/amd/vulkan/radv_pipeline.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index 53f06acc092..cbd846a7101 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -1483,6 +1483,24 @@ calculate_gs_ring_sizes(struct radv_pipeline *pipeline) pipeline->graphics.gsvs_ring_size = MIN2(gsvs_ring_size, max_size); } +static const struct radv_prim_vertex_count prim_size_table[] = { + [V_008958_DI_PT_NONE] = {0, 0}, + [V_008958_DI_PT_POINTLIST] = {1, 1}, + [V_008958_DI_PT_LINELIST] = {2, 2}, + [V_008958_DI_PT_LINESTRIP] = {2, 1}, + [V_008958_DI_PT_TRILIST] = {3, 3}, + [V_008958_DI_PT_TRIFAN] = {3, 1}, + [V_008958_DI_PT_TRISTRIP] = {3, 1}, + [V_008958_DI_PT_LINELIST_ADJ] = {4, 4}, + [V_008958_DI_PT_LINESTRIP_ADJ] = {4, 1}, + [V_008958_DI_PT_TRILIST_ADJ] = {6, 6}, + [V_008958_DI_PT_TRISTRIP_ADJ] = {6, 2}, + [V_008958_DI_PT_RECTLIST] = {3, 3}, + [V_008958_DI_PT_LINELOOP] = {2, 1}, + [V_008958_DI_PT_POLYGON] = {3, 1}, + [V_008958_DI_PT_2D_TRI_STRIP] = {0, 0}, +}; + VkResult radv_pipeline_init(struct radv_pipeline *pipeline, struct radv_device *device, @@ -1581,7 +1599,9 @@ radv_pipeline_init(struct radv_pipeline *pipeline, pipeline->graphics.gs_out = V_028A6C_OUTPRIM_TYPE_TRISTRIP; } pipeline->graphics.prim_restart_enable = !!pCreateInfo->pInputAssemblyState->primitiveRestartEnable; - + /* prim vertex count will need TESS changes */ + pipeline->graphics.prim_vertex_count = prim_size_table[pipeline->graphics.prim]; + const VkPipelineVertexInputStateCreateInfo *vi_info = pCreateInfo->pVertexInputState; for (uint32_t i = 0; i < vi_info->vertexAttributeDescriptionCount; i++) { |