anv: Unify 3DSTATE_CLIP code across generations.
The bulk of this is the same. There are just a couple fields that only exist on one generation or another, and we can easily handle those with an #ifdef. Cc: "12.0" <mesa-stable@lists.freedesktop.org> Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
@@ -117,27 +117,8 @@ genX(graphics_pipeline_create)(
|
|||||||
|
|
||||||
emit_urb_setup(pipeline);
|
emit_urb_setup(pipeline);
|
||||||
|
|
||||||
const VkPipelineRasterizationStateCreateInfo *rs_info =
|
emit_3dstate_clip(pipeline, pCreateInfo->pViewportState,
|
||||||
pCreateInfo->pRasterizationState;
|
pCreateInfo->pRasterizationState, extra);
|
||||||
|
|
||||||
anv_batch_emit(&pipeline->batch, GENX(3DSTATE_CLIP), clip) {
|
|
||||||
clip.FrontWinding = vk_to_gen_front_face[rs_info->frontFace],
|
|
||||||
clip.EarlyCullEnable = true,
|
|
||||||
clip.CullMode = vk_to_gen_cullmode[rs_info->cullMode],
|
|
||||||
clip.ClipEnable = !(extra && extra->use_rectlist),
|
|
||||||
clip.APIMode = APIMODE_D3D,
|
|
||||||
clip.ViewportXYClipTestEnable = true,
|
|
||||||
clip.ViewportZClipTestEnable = !pipeline->depth_clamp_enable,
|
|
||||||
clip.ClipMode = CLIPMODE_NORMAL,
|
|
||||||
|
|
||||||
clip.TriangleStripListProvokingVertexSelect = 0,
|
|
||||||
clip.LineStripListProvokingVertexSelect = 0,
|
|
||||||
clip.TriangleFanProvokingVertexSelect = 1,
|
|
||||||
|
|
||||||
clip.MinimumPointWidth = 0.125,
|
|
||||||
clip.MaximumPointWidth = 255.875,
|
|
||||||
clip.MaximumVPIndex = pCreateInfo->pViewportState->viewportCount - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pCreateInfo->pMultisampleState &&
|
if (pCreateInfo->pMultisampleState &&
|
||||||
pCreateInfo->pMultisampleState->rasterizationSamples > 1)
|
pCreateInfo->pMultisampleState->rasterizationSamples > 1)
|
||||||
|
@@ -186,29 +186,10 @@ genX(graphics_pipeline_create)(
|
|||||||
|
|
||||||
emit_urb_setup(pipeline);
|
emit_urb_setup(pipeline);
|
||||||
|
|
||||||
|
emit_3dstate_clip(pipeline, pCreateInfo->pViewportState,
|
||||||
|
pCreateInfo->pRasterizationState, extra);
|
||||||
|
|
||||||
const struct brw_wm_prog_data *wm_prog_data = get_wm_prog_data(pipeline);
|
const struct brw_wm_prog_data *wm_prog_data = get_wm_prog_data(pipeline);
|
||||||
anv_batch_emit(&pipeline->batch, GENX(3DSTATE_CLIP), clip) {
|
|
||||||
clip.ClipEnable = !(extra && extra->use_rectlist);
|
|
||||||
clip.EarlyCullEnable = true;
|
|
||||||
clip.APIMode = APIMODE_D3D;
|
|
||||||
clip.ViewportXYClipTestEnable = true;
|
|
||||||
|
|
||||||
clip.ClipMode =
|
|
||||||
pCreateInfo->pRasterizationState->rasterizerDiscardEnable ?
|
|
||||||
CLIPMODE_REJECT_ALL : CLIPMODE_NORMAL;
|
|
||||||
|
|
||||||
clip.NonPerspectiveBarycentricEnable = wm_prog_data ?
|
|
||||||
(wm_prog_data->barycentric_interp_modes & 0x38) != 0 : 0;
|
|
||||||
|
|
||||||
clip.TriangleStripListProvokingVertexSelect = 0;
|
|
||||||
clip.LineStripListProvokingVertexSelect = 0;
|
|
||||||
clip.TriangleFanProvokingVertexSelect = 1;
|
|
||||||
|
|
||||||
clip.MinimumPointWidth = 0.125;
|
|
||||||
clip.MaximumPointWidth = 255.875;
|
|
||||||
clip.MaximumVPIndex = pCreateInfo->pViewportState->viewportCount - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
anv_batch_emit(&pipeline->batch, GENX(3DSTATE_WM), wm) {
|
anv_batch_emit(&pipeline->batch, GENX(3DSTATE_WM), wm) {
|
||||||
wm.StatisticsEnable = true;
|
wm.StatisticsEnable = true;
|
||||||
wm.LineEndCapAntialiasingRegionWidth = _05pixels;
|
wm.LineEndCapAntialiasingRegionWidth = _05pixels;
|
||||||
|
@@ -646,3 +646,39 @@ emit_cb_state(struct anv_pipeline *pipeline,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
emit_3dstate_clip(struct anv_pipeline *pipeline,
|
||||||
|
const VkPipelineViewportStateCreateInfo *vp_info,
|
||||||
|
const VkPipelineRasterizationStateCreateInfo *rs_info,
|
||||||
|
const struct anv_graphics_pipeline_create_info *extra)
|
||||||
|
{
|
||||||
|
const struct brw_wm_prog_data *wm_prog_data = get_wm_prog_data(pipeline);
|
||||||
|
(void) wm_prog_data;
|
||||||
|
anv_batch_emit(&pipeline->batch, GENX(3DSTATE_CLIP), clip) {
|
||||||
|
clip.ClipEnable = !(extra && extra->use_rectlist);
|
||||||
|
clip.EarlyCullEnable = true;
|
||||||
|
clip.APIMode = APIMODE_D3D,
|
||||||
|
clip.ViewportXYClipTestEnable = true;
|
||||||
|
|
||||||
|
clip.ClipMode = rs_info->rasterizerDiscardEnable ?
|
||||||
|
CLIPMODE_REJECT_ALL : CLIPMODE_NORMAL;
|
||||||
|
|
||||||
|
clip.TriangleStripListProvokingVertexSelect = 0;
|
||||||
|
clip.LineStripListProvokingVertexSelect = 0;
|
||||||
|
clip.TriangleFanProvokingVertexSelect = 1;
|
||||||
|
|
||||||
|
clip.MinimumPointWidth = 0.125;
|
||||||
|
clip.MaximumPointWidth = 255.875;
|
||||||
|
clip.MaximumVPIndex = vp_info->viewportCount - 1;
|
||||||
|
|
||||||
|
#if GEN_GEN == 7
|
||||||
|
clip.FrontWinding = vk_to_gen_front_face[rs_info->frontFace];
|
||||||
|
clip.CullMode = vk_to_gen_cullmode[rs_info->cullMode];
|
||||||
|
clip.ViewportZClipTestEnable = !pipeline->depth_clamp_enable;
|
||||||
|
#else
|
||||||
|
clip.NonPerspectiveBarycentricEnable = wm_prog_data ?
|
||||||
|
(wm_prog_data->barycentric_interp_modes & 0x38) != 0 : 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user