aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2016-08-06 08:28:23 -0700
committerJason Ekstrand <[email protected]>2016-08-08 11:13:41 -0700
commitce980541d5dc9b114c3aa69b3560fcb6023ccf32 (patch)
tree71e0ce1b8ff2fa9d1e9fcedcca7b355b84e8e9a2
parent960e8a1260b34e8e34d2f39b91b11ea85ec483b1 (diff)
anv/pipeline: Unify 3DSTATE_RASTER and 3DSTATE_SF setup between gen7 and gen8
Signed-off-by: Jason Ekstrand <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r--src/intel/vulkan/gen7_pipeline.c43
-rw-r--r--src/intel/vulkan/gen8_pipeline.c49
-rw-r--r--src/intel/vulkan/genX_pipeline_util.h61
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
@@ -45,55 +45,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,