From ce980541d5dc9b114c3aa69b3560fcb6023ccf32 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Sat, 6 Aug 2016 08:28:23 -0700 Subject: [PATCH] anv/pipeline: Unify 3DSTATE_RASTER and 3DSTATE_SF setup between gen7 and gen8 Signed-off-by: Jason Ekstrand Reviewed-by: Kenneth Graunke --- src/intel/vulkan/gen7_pipeline.c | 43 +------------------ src/intel/vulkan/gen8_pipeline.c | 49 --------------------- src/intel/vulkan/genX_pipeline_util.h | 61 +++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 91 deletions(-) diff --git a/src/intel/vulkan/gen7_pipeline.c b/src/intel/vulkan/gen7_pipeline.c index 6b57dd65dc3..df8fa289151 100644 --- a/src/intel/vulkan/gen7_pipeline.c +++ b/src/intel/vulkan/gen7_pipeline.c @@ -34,47 +34,6 @@ #include "genX_pipeline_util.h" -static void -gen7_emit_rs_state(struct anv_pipeline *pipeline, - const VkPipelineRasterizationStateCreateInfo *info, - const struct anv_graphics_pipeline_create_info *extra) -{ - struct GENX(3DSTATE_SF) sf = { - GENX(3DSTATE_SF_header), - - /* LegacyGlobalDepthBiasEnable */ - - .StatisticsEnable = true, - .FrontFaceFillMode = vk_to_gen_fillmode[info->polygonMode], - .BackFaceFillMode = vk_to_gen_fillmode[info->polygonMode], - .ViewportTransformEnable = !(extra && extra->use_rectlist), - .FrontWinding = vk_to_gen_front_face[info->frontFace], - /* bool AntiAliasingEnable; */ - - .CullMode = vk_to_gen_cullmode[info->cullMode], - - /* uint32_t LineEndCapAntialiasingRegionWidth; */ - .ScissorRectangleEnable = !(extra && extra->use_rectlist), - - /* uint32_t MultisampleRasterizationMode; */ - /* bool LastPixelEnable; */ - - .TriangleStripListProvokingVertexSelect = 0, - .LineStripListProvokingVertexSelect = 0, - .TriangleFanProvokingVertexSelect = 1, - - /* uint32_t AALineDistanceMode; */ - /* uint32_t VertexSubPixelPrecisionSelect; */ - .PointWidthSource = Vertex, - .PointWidth = 1.0, - .GlobalDepthOffsetEnableSolid = info->depthBiasEnable, - .GlobalDepthOffsetEnableWireframe = info->depthBiasEnable, - .GlobalDepthOffsetEnablePoint = info->depthBiasEnable, - }; - - GENX(3DSTATE_SF_pack)(NULL, &pipeline->gen7.sf, &sf); -} - VkResult genX(graphics_pipeline_create)( VkDevice _device, @@ -108,7 +67,7 @@ genX(graphics_pipeline_create)( emit_vertex_input(pipeline, pCreateInfo->pVertexInputState, extra); assert(pCreateInfo->pRasterizationState); - gen7_emit_rs_state(pipeline, pCreateInfo->pRasterizationState, extra); + emit_rs_state(pipeline, pCreateInfo->pRasterizationState, extra); emit_ds_state(pipeline, pCreateInfo->pDepthStencilState, pass, subpass); diff --git a/src/intel/vulkan/gen8_pipeline.c b/src/intel/vulkan/gen8_pipeline.c index 65339b992f2..e09d8cf628a 100644 --- a/src/intel/vulkan/gen8_pipeline.c +++ b/src/intel/vulkan/gen8_pipeline.c @@ -44,55 +44,6 @@ emit_ia_state(struct anv_pipeline *pipeline, } } -static void -emit_rs_state(struct anv_pipeline *pipeline, - const VkPipelineRasterizationStateCreateInfo *info, - const struct anv_graphics_pipeline_create_info *extra) -{ - struct GENX(3DSTATE_SF) sf = { - GENX(3DSTATE_SF_header), - }; - - sf.ViewportTransformEnable = !(extra && extra->use_rectlist); - sf.StatisticsEnable = true; - sf.TriangleStripListProvokingVertexSelect = 0; - sf.LineStripListProvokingVertexSelect = 0; - sf.TriangleFanProvokingVertexSelect = 1; - sf.PointWidthSource = Vertex; - sf.PointWidth = 1.0; - - GENX(3DSTATE_SF_pack)(NULL, pipeline->gen8.sf, &sf); - - struct GENX(3DSTATE_RASTER) raster = { - GENX(3DSTATE_RASTER_header), - }; - - /* For details on 3DSTATE_RASTER multisample state, see the BSpec table - * "Multisample Modes State". - */ - raster.DXMultisampleRasterizationEnable = true; - raster.ForcedSampleCount = FSC_NUMRASTSAMPLES_0; - raster.ForceMultisampling = false; - - raster.FrontWinding = vk_to_gen_front_face[info->frontFace]; - raster.CullMode = vk_to_gen_cullmode[info->cullMode]; - raster.FrontFaceFillMode = vk_to_gen_fillmode[info->polygonMode]; - raster.BackFaceFillMode = vk_to_gen_fillmode[info->polygonMode]; - raster.ScissorRectangleEnable = !(extra && extra->use_rectlist); -#if GEN_GEN == 8 - raster.ViewportZClipTestEnable = !pipeline->depth_clamp_enable; -#else - /* GEN9+ splits ViewportZClipTestEnable into near and far enable bits */ - raster.ViewportZFarClipTestEnable = !pipeline->depth_clamp_enable; - raster.ViewportZNearClipTestEnable = !pipeline->depth_clamp_enable; -#endif - raster.GlobalDepthOffsetEnableSolid = info->depthBiasEnable; - raster.GlobalDepthOffsetEnableWireframe = info->depthBiasEnable; - raster.GlobalDepthOffsetEnablePoint = info->depthBiasEnable; - - GENX(3DSTATE_RASTER_pack)(NULL, pipeline->gen8.raster, &raster); -} - static void emit_ms_state(struct anv_pipeline *pipeline, const VkPipelineMultisampleStateCreateInfo *info) diff --git a/src/intel/vulkan/genX_pipeline_util.h b/src/intel/vulkan/genX_pipeline_util.h index c134d5da5a7..59941205529 100644 --- a/src/intel/vulkan/genX_pipeline_util.h +++ b/src/intel/vulkan/genX_pipeline_util.h @@ -362,6 +362,67 @@ static const uint32_t vk_to_gen_front_face[] = { [VK_FRONT_FACE_CLOCKWISE] = 0 }; +static void +emit_rs_state(struct anv_pipeline *pipeline, + const VkPipelineRasterizationStateCreateInfo *info, + const struct anv_graphics_pipeline_create_info *extra) +{ + struct GENX(3DSTATE_SF) sf = { + GENX(3DSTATE_SF_header), + }; + + sf.ViewportTransformEnable = !(extra && extra->use_rectlist); + sf.StatisticsEnable = true; + sf.TriangleStripListProvokingVertexSelect = 0; + sf.LineStripListProvokingVertexSelect = 0; + sf.TriangleFanProvokingVertexSelect = 1; + sf.PointWidthSource = Vertex; + sf.PointWidth = 1.0; + +#if GEN_GEN >= 8 + struct GENX(3DSTATE_RASTER) raster = { + GENX(3DSTATE_RASTER_header), + }; +#else +# define raster sf +#endif + + /* For details on 3DSTATE_RASTER multisample state, see the BSpec table + * "Multisample Modes State". + */ +#if GEN_GEN >= 8 + raster.DXMultisampleRasterizationEnable = true; + raster.ForcedSampleCount = FSC_NUMRASTSAMPLES_0; + raster.ForceMultisampling = false; +#endif + + raster.FrontWinding = vk_to_gen_front_face[info->frontFace]; + raster.CullMode = vk_to_gen_cullmode[info->cullMode]; + raster.FrontFaceFillMode = vk_to_gen_fillmode[info->polygonMode]; + raster.BackFaceFillMode = vk_to_gen_fillmode[info->polygonMode]; + raster.ScissorRectangleEnable = !(extra && extra->use_rectlist); + +#if GEN_GEN >= 9 + /* GEN9+ splits ViewportZClipTestEnable into near and far enable bits */ + raster.ViewportZFarClipTestEnable = !pipeline->depth_clamp_enable; + raster.ViewportZNearClipTestEnable = !pipeline->depth_clamp_enable; +#elif GEN_GEN >= 8 + raster.ViewportZClipTestEnable = !pipeline->depth_clamp_enable; +#endif + + raster.GlobalDepthOffsetEnableSolid = info->depthBiasEnable; + raster.GlobalDepthOffsetEnableWireframe = info->depthBiasEnable; + raster.GlobalDepthOffsetEnablePoint = info->depthBiasEnable; + +#if GEN_GEN >= 8 + GENX(3DSTATE_SF_pack)(NULL, pipeline->gen8.sf, &sf); + GENX(3DSTATE_RASTER_pack)(NULL, pipeline->gen8.raster, &raster); +#else +# undef raster + GENX(3DSTATE_SF_pack)(NULL, &pipeline->gen7.sf, &sf); +#endif +} + static const uint32_t vk_to_gen_logic_op[] = { [VK_LOGIC_OP_COPY] = LOGICOP_COPY, [VK_LOGIC_OP_CLEAR] = LOGICOP_CLEAR, -- 2.30.2