blob: 9d99c4723be0870676a8a37a50bd0e133b64aeae [file] [log] [blame]
/*
* 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);
}