Module: Mesa Branch: main Commit: 7854f9283c83f50c2d1f0775cffb7f4df6e8316d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7854f9283c83f50c2d1f0775cffb7f4df6e8316d
Author: Giancarlo Devich <[email protected]> Date: Tue Mar 14 11:28:24 2023 -0700 d3d12: Don't unnecessarily recompute manual_depth_range Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21909> --- src/gallium/drivers/d3d12/d3d12_compiler.cpp | 4 ++-- src/gallium/drivers/d3d12/d3d12_compiler.h | 3 +++ src/gallium/drivers/d3d12/d3d12_context.cpp | 4 +++- src/gallium/drivers/d3d12/d3d12_context.h | 1 + 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/d3d12/d3d12_compiler.cpp b/src/gallium/drivers/d3d12/d3d12_compiler.cpp index b2bfd690f10..d7d9c34e1f8 100644 --- a/src/gallium/drivers/d3d12/d3d12_compiler.cpp +++ b/src/gallium/drivers/d3d12/d3d12_compiler.cpp @@ -318,7 +318,7 @@ frag_result_color_lowering(struct d3d12_context *ctx) return 0; } -static bool +bool manual_depth_range(struct d3d12_context *ctx) { if (!d3d12_need_zero_one_depth_range(ctx)) @@ -1620,7 +1620,7 @@ d3d12_select_shader_variants(struct d3d12_context *ctx, const struct pipe_draw_i sel_ctx.needs_vertex_reordering = needs_vertex_reordering(&sel_ctx, dinfo); sel_ctx.missing_dual_src_outputs = ctx->missing_dual_src_outputs; sel_ctx.frag_result_color_lowering = frag_result_color_lowering(ctx); - sel_ctx.manual_depth_range = manual_depth_range(ctx); + sel_ctx.manual_depth_range = ctx->manual_depth_range; validate_geometry_shader_variant(&sel_ctx); validate_tess_ctrl_shader_variant(&sel_ctx); diff --git a/src/gallium/drivers/d3d12/d3d12_compiler.h b/src/gallium/drivers/d3d12/d3d12_compiler.h index 7767ec43f8a..30b90adb55c 100644 --- a/src/gallium/drivers/d3d12/d3d12_compiler.h +++ b/src/gallium/drivers/d3d12/d3d12_compiler.h @@ -320,6 +320,9 @@ has_flat_varyings(struct d3d12_context* ctx); bool d3d12_compare_varying_info(const struct d3d12_varying_info *expect, const struct d3d12_varying_info *have); +bool +manual_depth_range(struct d3d12_context* ctx); + #ifdef __cplusplus } #endif diff --git a/src/gallium/drivers/d3d12/d3d12_context.cpp b/src/gallium/drivers/d3d12/d3d12_context.cpp index 69943bdddf0..af3dbf089fa 100644 --- a/src/gallium/drivers/d3d12/d3d12_context.cpp +++ b/src/gallium/drivers/d3d12/d3d12_context.cpp @@ -1134,6 +1134,7 @@ d3d12_bind_fs_state(struct pipe_context *pctx, (struct d3d12_shader_selector *) fss); ctx->has_flat_varyings = has_flat_varyings(ctx); ctx->missing_dual_src_outputs = missing_dual_src_outputs(ctx); + ctx->manual_depth_range = manual_depth_range(ctx); } static void @@ -2515,6 +2516,7 @@ d3d12_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags) ctx->has_flat_varyings = false; ctx->missing_dual_src_outputs = false; + ctx->manual_depth_range = false; d3d12_context_surface_init(&ctx->base); d3d12_context_resource_init(&ctx->base); @@ -2657,5 +2659,5 @@ d3d12_need_zero_one_depth_range(struct d3d12_context *ctx) * end up generating needless code, but the result will be correct. */ - return fs->initial->info.outputs_written & BITFIELD64_BIT(FRAG_RESULT_DEPTH); + return fs && fs->initial->info.outputs_written & BITFIELD64_BIT(FRAG_RESULT_DEPTH); } diff --git a/src/gallium/drivers/d3d12/d3d12_context.h b/src/gallium/drivers/d3d12/d3d12_context.h index 2b8c1b72b42..4bf9d56b924 100644 --- a/src/gallium/drivers/d3d12/d3d12_context.h +++ b/src/gallium/drivers/d3d12/d3d12_context.h @@ -241,6 +241,7 @@ struct d3d12_context { bool has_flat_varyings; bool missing_dual_src_outputs; + bool manual_depth_range; struct d3d12_gfx_pipeline_state gfx_pipeline_state; struct d3d12_compute_pipeline_state compute_pipeline_state;
