diff --git a/src/gallium/drivers/d3d12/d3d12_compiler.cpp b/src/gallium/drivers/d3d12/d3d12_compiler.cpp index 14c307e4723..3fe15b06cf6 100644 --- a/src/gallium/drivers/d3d12/d3d12_compiler.cpp +++ b/src/gallium/drivers/d3d12/d3d12_compiler.cpp @@ -737,7 +737,7 @@ validate_geometry_shader_variant(struct d3d12_selection_context *sel_ctx) if (sel_ctx->fill_mode_lowered != PIPE_POLYGON_MODE_FILL) { key.fill_mode = sel_ctx->fill_mode_lowered; key.cull_mode = sel_ctx->cull_mode_lowered; - key.has_front_face = BITSET_TEST(fs->initial->info.system_values_read, SYSTEM_VALUE_FRONT_FACE); + key.has_front_face = (fs->initial->info.inputs_read & VARYING_BIT_FACE) != 0; if (key.cull_mode != PIPE_FACE_NONE || key.has_front_face) key.front_ccw = ctx->gfx_pipeline_state.rast->base.front_ccw ^ (ctx->flip_y < 0); key.edge_flag_fix = needs_edge_flag_fix(ctx->initial_api_prim); diff --git a/src/gallium/drivers/d3d12/d3d12_screen.cpp b/src/gallium/drivers/d3d12/d3d12_screen.cpp index 0ef4d06450f..c57ac12196c 100644 --- a/src/gallium/drivers/d3d12/d3d12_screen.cpp +++ b/src/gallium/drivers/d3d12/d3d12_screen.cpp @@ -231,9 +231,6 @@ d3d12_get_param_default(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_FS_COORD_ORIGIN_UPPER_LEFT: return 1; - case PIPE_CAP_FS_FACE_IS_INTEGER_SYSVAL: - return 1; - case PIPE_CAP_ACCELERATED: return screen->vendor_id != HW_VENDOR_MICROSOFT; diff --git a/src/microsoft/compiler/dxil_nir.c b/src/microsoft/compiler/dxil_nir.c index 49359965692..a3ad53f69a0 100644 --- a/src/microsoft/compiler/dxil_nir.c +++ b/src/microsoft/compiler/dxil_nir.c @@ -1470,9 +1470,6 @@ lower_sysval_to_load_input_impl(nir_builder *b, nir_intrinsic_instr *intr, { gl_system_value sysval = SYSTEM_VALUE_MAX; switch (intr->intrinsic) { - case nir_intrinsic_load_front_face: - sysval = SYSTEM_VALUE_FRONT_FACE; - break; case nir_intrinsic_load_instance_id: sysval = SYSTEM_VALUE_INSTANCE_ID; break; @@ -1487,22 +1484,13 @@ lower_sysval_to_load_input_impl(nir_builder *b, nir_intrinsic_instr *intr, nir_variable *var = sysval_vars[sysval]; assert(var); - const nir_alu_type dest_type = (sysval == SYSTEM_VALUE_FRONT_FACE) - ? nir_type_uint32 : nir_get_nir_type_for_glsl_type(var->type); - const unsigned bit_size = (sysval == SYSTEM_VALUE_FRONT_FACE) - ? 32 : intr->def.bit_size; + const nir_alu_type dest_type = nir_get_nir_type_for_glsl_type(var->type); + const unsigned bit_size = intr->def.bit_size; b->cursor = nir_before_instr(&intr->instr); nir_def *result = nir_load_input(b, intr->def.num_components, bit_size, nir_imm_int(b, 0), .base = var->data.driver_location, .dest_type = dest_type); - /* The nir_type_uint32 is really a nir_type_bool32, but that type is very - * inconvenient at this point during compilation. Convert to - * nir_type_bool1 by comparing with zero. - */ - if (sysval == SYSTEM_VALUE_FRONT_FACE) - result = nir_ine_imm(b, result, 0); - nir_def_rewrite_uses(&intr->def, result); return true; } @@ -2268,36 +2256,17 @@ dxil_nir_lower_unsupported_subgroup_scan(nir_shader *s) return ret; } -static bool -lower_load_face(nir_builder *b, nir_intrinsic_instr *intr, void *data) -{ - if (intr->intrinsic != nir_intrinsic_load_front_face) - return false; - - b->cursor = nir_before_instr(&intr->instr); - - nir_variable *var = data; - nir_def *load = nir_ine_imm(b, nir_load_var(b, var), 0); - - nir_def_rewrite_uses(&intr->def, load); - nir_instr_remove(&intr->instr); - return true; -} - bool dxil_nir_forward_front_face(nir_shader *nir) { assert(nir->info.stage == MESA_SHADER_FRAGMENT); - nir_variable *var = nir_variable_create(nir, nir_var_shader_in, - glsl_uint_type(), - "gl_FrontFacing"); - var->data.location = VARYING_SLOT_VAR12; - var->data.interpolation = INTERP_MODE_FLAT; - - return nir_shader_intrinsics_pass(nir, lower_load_face, - nir_metadata_block_index | nir_metadata_dominance, - var); + nir_variable *var = nir_find_variable_with_location(nir, nir_var_shader_in, VARYING_SLOT_FACE); + if (var) { + var->data.location = VARYING_SLOT_VAR12; + return true; + } + return false; } static bool diff --git a/src/microsoft/compiler/dxil_signature.c b/src/microsoft/compiler/dxil_signature.c index 02501075554..e62c30225a3 100644 --- a/src/microsoft/compiler/dxil_signature.c +++ b/src/microsoft/compiler/dxil_signature.c @@ -201,9 +201,6 @@ get_semantic_sv_name(nir_variable *var, struct semantic_info *info, gl_shader_st case SYSTEM_VALUE_VERTEX_ID_ZERO_BASE: info->kind = DXIL_SEM_VERTEX_ID; break; - case SYSTEM_VALUE_FRONT_FACE: - info->kind = DXIL_SEM_IS_FRONT_FACE; - break; case SYSTEM_VALUE_INSTANCE_ID: info->kind = DXIL_SEM_INSTANCE_ID; break; diff --git a/src/microsoft/compiler/nir_to_dxil.c b/src/microsoft/compiler/nir_to_dxil.c index cb17af02469..7f2892528f5 100644 --- a/src/microsoft/compiler/nir_to_dxil.c +++ b/src/microsoft/compiler/nir_to_dxil.c @@ -589,7 +589,6 @@ struct ntd_context { const struct dxil_value **scratchvars; const struct dxil_value **consts; - nir_variable *ps_front_face; nir_variable *system_value[SYSTEM_VALUE_MAX]; nir_function *tess_ctrl_patch_constant_func; diff --git a/src/microsoft/spirv_to_dxil/dxil_spirv_nir.c b/src/microsoft/spirv_to_dxil/dxil_spirv_nir.c index 45a00f5eac4..cfbb5cc1ea8 100644 --- a/src/microsoft/spirv_to_dxil/dxil_spirv_nir.c +++ b/src/microsoft/spirv_to_dxil/dxil_spirv_nir.c @@ -885,6 +885,7 @@ dxil_spirv_nir_passes(nir_shader *nir, const struct nir_lower_sysvals_to_varyings_options sysvals_to_varyings = { .frag_coord = true, .point_coord = true, + .front_face = true, }; NIR_PASS_V(nir, nir_lower_sysvals_to_varyings, &sysvals_to_varyings);