Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> --- src/intel/vulkan/anv_private.h | 18 ++++++++++++++++++ src/intel/vulkan/gen8_pipeline.c | 15 ++++++++------- src/intel/vulkan/genX_pipeline_util.h | 5 +++++ 3 files changed, 31 insertions(+), 7 deletions(-)
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 30deb02..eef2926 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1445,6 +1445,24 @@ ANV_DECL_GET_PROG_DATA_FUNC(gs, MESA_SHADER_GEOMETRY) ANV_DECL_GET_PROG_DATA_FUNC(wm, MESA_SHADER_FRAGMENT) ANV_DECL_GET_PROG_DATA_FUNC(cs, MESA_SHADER_COMPUTE) +/** + * Get the brw_vue_prog_data for the last stage which outputs VUEs. + */ +static inline struct brw_vue_prog_data * +get_last_vue_prog_data(struct anv_pipeline *pipeline) +{ + const unsigned pre_clip_stages = + pipeline->active_stages & (VK_SHADER_STAGE_FRAGMENT_BIT - 1); + const unsigned last_bit = util_last_bit(pre_clip_stages); + + if (last_bit == 0) + return NULL; + + struct anv_shader_bin *bin = pipeline->shaders[last_bit - 1]; + + return (struct brw_vue_prog_data *) bin->prog_data; +} + VkResult anv_pipeline_init(struct anv_pipeline *pipeline, struct anv_device *device, struct anv_pipeline_cache *cache, diff --git a/src/intel/vulkan/gen8_pipeline.c b/src/intel/vulkan/gen8_pipeline.c index 6cf55f5..4fad8cd 100644 --- a/src/intel/vulkan/gen8_pipeline.c +++ b/src/intel/vulkan/gen8_pipeline.c @@ -158,10 +158,10 @@ genX(graphics_pipeline_create)( gs_prog_data->static_vertex_count >= 0 ? gs_prog_data->static_vertex_count : 0; - /* FIXME: mesa sets this based on ctx->Transform.ClipPlanesEnabled: - * UserClipDistanceClipTestEnableBitmask_3DSTATE_GS(v) - * UserClipDistanceCullTestEnableBitmask(v) - */ + gs.UserClipDistanceClipTestEnableBitmask = + gs_prog_data->base.clip_distance_mask; + gs.UserClipDistanceCullTestEnableBitmask = + gs_prog_data->base.cull_distance_mask; gs.VertexURBEntryOutputReadOffset = offset; gs.VertexURBEntryOutputLength = length; @@ -224,9 +224,10 @@ genX(graphics_pipeline_create)( vs.VertexURBEntryOutputReadOffset = offset; vs.VertexURBEntryOutputLength = length; - /* TODO */ - vs.UserClipDistanceClipTestEnableBitmask = 0; - vs.UserClipDistanceCullTestEnableBitmask = 0; + vs.UserClipDistanceClipTestEnableBitmask = + vs_prog_data->base.clip_distance_mask; + vs.UserClipDistanceCullTestEnableBitmask = + vs_prog_data->base.cull_distance_mask; } } diff --git a/src/intel/vulkan/genX_pipeline_util.h b/src/intel/vulkan/genX_pipeline_util.h index 129ae94..5bee80c 100644 --- a/src/intel/vulkan/genX_pipeline_util.h +++ b/src/intel/vulkan/genX_pipeline_util.h @@ -940,6 +940,11 @@ emit_3dstate_clip(struct anv_pipeline *pipeline, 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 = get_last_vue_prog_data(pipeline); + if (last) { + clip.UserClipDistanceClipTestEnableBitmask = last->clip_distance_mask; + clip.UserClipDistanceCullTestEnableBitmask = last->cull_distance_mask; + } #else clip.NonPerspectiveBarycentricEnable = wm_prog_data ? (wm_prog_data->barycentric_interp_modes & 0x38) != 0 : 0; -- 2.10.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev