From: Kristian Høgsberg Kristensen <kristian.h.kristen...@intel.com>
This applies on top of Tobias series. Signed-off-by: Kristian Høgsberg Kristensen <kristian.h.kristen...@intel.com> --- src/mesa/drivers/dri/i965/brw_compiler.h | 2 ++ src/mesa/drivers/dri/i965/brw_vs.c | 4 ++++ src/mesa/drivers/dri/i965/gen6_clip_state.c | 2 ++ src/mesa/drivers/dri/i965/gen8_ds_state.c | 3 ++- src/mesa/drivers/dri/i965/gen8_gs_state.c | 3 ++- src/mesa/drivers/dri/i965/gen8_vs_state.c | 3 ++- src/mesa/drivers/dri/i965/intel_extensions.c | 1 + 7 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_compiler.h b/src/mesa/drivers/dri/i965/brw_compiler.h index 5807305..3d1dc88 100644 --- a/src/mesa/drivers/dri/i965/brw_compiler.h +++ b/src/mesa/drivers/dri/i965/brw_compiler.h @@ -592,6 +592,8 @@ struct brw_vue_prog_data { GLuint urb_read_length; GLuint total_grf; + uint32_t cull_distance_mask; + /* Used for calculating urb partitions. In the VS, this is the size of the * URB entry used for both input and output to the thread. In the GS, this * is the size of the URB entry used for output. diff --git a/src/mesa/drivers/dri/i965/brw_vs.c b/src/mesa/drivers/dri/i965/brw_vs.c index 3095d82..1bbc315 100644 --- a/src/mesa/drivers/dri/i965/brw_vs.c +++ b/src/mesa/drivers/dri/i965/brw_vs.c @@ -118,6 +118,10 @@ brw_codegen_vs_prog(struct brw_context *brw, prog_data.inputs_read |= VERT_BIT_EDGEFLAG; } + prog_data.base.cull_distance_mask = + ((1 << vp->program.Base.CullDistanceArraySize) - 1) << + vp->program.Base.ClipDistanceArraySize; + if (brw->gen < 6) { /* Put dummy slots into the VUE for the SF to put the replaced * point sprite coords in. We shouldn't need these dummy slots, diff --git a/src/mesa/drivers/dri/i965/gen6_clip_state.c b/src/mesa/drivers/dri/i965/gen6_clip_state.c index 8ae19c8..26de633 100644 --- a/src/mesa/drivers/dri/i965/gen6_clip_state.c +++ b/src/mesa/drivers/dri/i965/gen6_clip_state.c @@ -50,6 +50,8 @@ upload_clip_state(struct brw_context *brw) dw2 |= GEN6_CLIP_NON_PERSPECTIVE_BARYCENTRIC_ENABLE; } + dw1 |= brw->vs.prog_data->base.cull_distance_mask; + if (brw->gen >= 7) dw1 |= GEN7_CLIP_EARLY_CULL; diff --git a/src/mesa/drivers/dri/i965/gen8_ds_state.c b/src/mesa/drivers/dri/i965/gen8_ds_state.c index c730168..a931eb7 100644 --- a/src/mesa/drivers/dri/i965/gen8_ds_state.c +++ b/src/mesa/drivers/dri/i965/gen8_ds_state.c @@ -69,7 +69,8 @@ gen8_upload_ds_state(struct brw_context *brw) GEN7_DS_SIMD8_DISPATCH_ENABLE : 0) | (tes_prog_data->domain == BRW_TESS_DOMAIN_TRI ? GEN7_DS_COMPUTE_W_COORDINATE_ENABLE : 0)); - OUT_BATCH(SET_FIELD(ctx->Transform.ClipPlanesEnabled, + OUT_BATCH(SET_FIELD(prog_data->cull_distance_mask | + ctx->Transform.ClipPlanesEnabled, GEN8_DS_USER_CLIP_DISTANCE)); if (brw->gen >= 9) { diff --git a/src/mesa/drivers/dri/i965/gen8_gs_state.c b/src/mesa/drivers/dri/i965/gen8_gs_state.c index 0889311..2741330 100644 --- a/src/mesa/drivers/dri/i965/gen8_gs_state.c +++ b/src/mesa/drivers/dri/i965/gen8_gs_state.c @@ -108,7 +108,8 @@ gen8_upload_gs_state(struct brw_context *brw) OUT_BATCH(dw8); /* DW9 / _NEW_TRANSFORM */ - OUT_BATCH((ctx->Transform.ClipPlanesEnabled << + OUT_BATCH((prog_data->cull_distance_mask | + ctx->Transform.ClipPlanesEnabled << GEN8_GS_USER_CLIP_DISTANCE_SHIFT) | (urb_entry_output_length << GEN8_GS_URB_OUTPUT_LENGTH_SHIFT) | (urb_entry_write_offset << diff --git a/src/mesa/drivers/dri/i965/gen8_vs_state.c b/src/mesa/drivers/dri/i965/gen8_vs_state.c index fd59a86..d4a3455 100644 --- a/src/mesa/drivers/dri/i965/gen8_vs_state.c +++ b/src/mesa/drivers/dri/i965/gen8_vs_state.c @@ -77,7 +77,8 @@ upload_vs_state(struct brw_context *brw) GEN6_VS_ENABLE); /* _NEW_TRANSFORM */ - OUT_BATCH((ctx->Transform.ClipPlanesEnabled << + OUT_BATCH(prog_data->cull_distance_mask | + (ctx->Transform.ClipPlanesEnabled << GEN8_VS_USER_CLIP_DISTANCE_SHIFT)); ADVANCE_BATCH(); } diff --git a/src/mesa/drivers/dri/i965/intel_extensions.c b/src/mesa/drivers/dri/i965/intel_extensions.c index 8d98788..2a72722 100644 --- a/src/mesa/drivers/dri/i965/intel_extensions.c +++ b/src/mesa/drivers/dri/i965/intel_extensions.c @@ -180,6 +180,7 @@ intelInitExtensions(struct gl_context *ctx) ctx->Extensions.ARB_clear_texture = true; ctx->Extensions.ARB_clip_control = true; ctx->Extensions.ARB_copy_image = true; + ctx->Extensions.ARB_cull_distance = true; ctx->Extensions.ARB_depth_buffer_float = true; ctx->Extensions.ARB_depth_clamp = true; ctx->Extensions.ARB_depth_texture = true; -- 2.5.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev