mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-23 11:10:10 +01:00
This will be necessary to select the right value for flat inputs in fragment shaders when fragment shader barycentrics are in use. Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34445>
50 lines
1.5 KiB
C
50 lines
1.5 KiB
C
/*
|
|
* Copyright (c) 2025 Intel Corporation
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
#include "compiler/nir/nir_builder.h"
|
|
#include "brw_nir.h"
|
|
|
|
static bool
|
|
brw_nir_lower_fs_msaa_intel_instr(nir_builder *b,
|
|
nir_intrinsic_instr *intrin,
|
|
void *data)
|
|
{
|
|
if (intrin->intrinsic != nir_intrinsic_load_fs_msaa_intel)
|
|
return false;
|
|
|
|
b->cursor = nir_before_instr(&intrin->instr);
|
|
|
|
const struct brw_wm_prog_key *key = data;
|
|
|
|
uint32_t fs_msaa_flags =
|
|
(key->multisample_fbo == INTEL_ALWAYS ?
|
|
INTEL_MSAA_FLAG_MULTISAMPLE_FBO : 0) |
|
|
(key->persample_interp == INTEL_ALWAYS ?
|
|
(INTEL_MSAA_FLAG_PERSAMPLE_DISPATCH |
|
|
INTEL_MSAA_FLAG_PERSAMPLE_INTERP) : 0) |
|
|
(key->alpha_to_coverage == INTEL_ALWAYS ?
|
|
INTEL_MSAA_FLAG_ALPHA_TO_COVERAGE : 0) |
|
|
(key->provoking_vertex_last == INTEL_ALWAYS ?
|
|
INTEL_MSAA_FLAG_PROVOKING_VERTEX_LAST : 0);
|
|
|
|
nir_def_replace(&intrin->def, nir_imm_int(b, fs_msaa_flags));
|
|
|
|
return true;
|
|
}
|
|
|
|
bool
|
|
brw_nir_lower_fs_msaa(nir_shader *shader,
|
|
const struct brw_wm_prog_key *key)
|
|
{
|
|
if (brw_wm_prog_key_is_dynamic(key))
|
|
return false;
|
|
|
|
return nir_shader_intrinsics_pass(shader,
|
|
brw_nir_lower_fs_msaa_intel_instr,
|
|
nir_metadata_control_flow |
|
|
nir_metadata_live_defs |
|
|
nir_metadata_divergence,
|
|
(void *)key);
|
|
}
|