Tested-by: Mark Janes <mark.a.ja...@intel.com> Jason Ekstrand <ja...@jlekstrand.net> writes:
> When the shader does not set one of these values, they are supposed to > get a default value of 0. We have hardware bits in 3DSTATE_CLIP for > this but haven't been setting them. This fixes the intermittent failure > of dEQP-VK.geometry.layered.3d.render_to_default_layer. > > Cc: "13.0 17.0" <mesa-sta...@lists.freedesktop.org> > --- > src/intel/vulkan/genX_pipeline.c | 27 ++++++++++++++++++++++++--- > 1 file changed, 24 insertions(+), 3 deletions(-) > > diff --git a/src/intel/vulkan/genX_pipeline.c > b/src/intel/vulkan/genX_pipeline.c > index 85a9e4f..f79b9b0 100644 > --- a/src/intel/vulkan/genX_pipeline.c > +++ b/src/intel/vulkan/genX_pipeline.c > @@ -1014,14 +1014,35 @@ emit_3dstate_clip(struct anv_pipeline *pipeline, > > clip.MinimumPointWidth = 0.125; > clip.MaximumPointWidth = 255.875; > - clip.MaximumVPIndex = (vp_info ? vp_info->viewportCount : 1) - 1; > + > + const struct brw_vue_prog_data *last = > + anv_pipeline_get_last_vue_prog_data(pipeline); > + > + /* From the Vulkan 1.0.45 spec: > + * > + * "If the last active vertex processing stage shader entry point’s > + * interface does not include a variable decorated with > + * ViewportIndex, then the first viewport is used." > + */ > + if (vp_info && (last->vue_map.slots_valid & VARYING_BIT_VIEWPORT)) { > + clip.MaximumVPIndex = vp_info->viewportCount - 1; > + } else { > + clip.MaximumVPIndex = 0; > + } > + > + /* From the Vulkan 1.0.45 spec: > + * > + * "If the last active vertex processing stage shader entry point’s > + * interface does not include a variable decorated with Layer, then > + * the first layer is used." > + */ > + clip.ForceZeroRTAIndexEnable = > + !(last->vue_map.slots_valid & VARYING_BIT_LAYER); > > #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; > - const struct brw_vue_prog_data *last = > - anv_pipeline_get_last_vue_prog_data(pipeline); > if (last) { > clip.UserClipDistanceClipTestEnableBitmask = > last->clip_distance_mask; > clip.UserClipDistanceCullTestEnableBitmask = > last->cull_distance_mask; > -- > 2.5.0.400.gff86faf > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev