/* * Copyright © 2024 Imagination Technologies Ltd. * * SPDX-License-Identifier: MIT */ /** * \file pvr_uscgen.c * * \brief USC shader generation. */ #include "nir/nir.h" #include "nir/nir_builder.h" #include "pco/pco.h" #include "pvr_uscgen.h" #include "util/macros.h" /** * Common function to build a NIR shader and export the binary. * * \param ctx PCO context. * \param nir NIR shader. * \param binary Output shader binary. */ static void build_shader(pco_ctx *ctx, nir_shader *nir, pco_binary **binary) { pco_preprocess_nir(ctx, nir); pco_lower_nir(ctx, nir); pco_postprocess_nir(ctx, nir); pco_shader *shader = pco_trans_nir(ctx, nir); pco_process_ir(ctx, shader); pco_binary *bin = pco_encode_ir(ctx, shader); ralloc_free(shader); pco_binary_finalize(ctx, bin); *binary = bin; } /** * Generate a nop (empty) shader. * * \param ctx PCO context. * \param stage Shader stage. * \param binary Output shader binary. */ void pvr_uscgen_nop(pco_ctx *ctx, gl_shader_stage stage, pco_binary **binary) { unreachable("finishme: pvr_uscgen_nop"); } /** * Generate an end-of-tile shader. * * \param ctx PCO context. * \param props End of tile shader properties. * \param binary Output shader binary. */ void pvr_uscgen_eot(pco_ctx *ctx, struct pvr_eot_props *props, pco_binary **binary) { unreachable("finishme: pvr_uscgen_eot"); } /** * Generate a transfer queue shader. * * \param ctx PCO context. * \param props Transfer queue shader properties. * \param binary Output shader binary. */ void pvr_uscgen_tq(pco_ctx *ctx, struct pvr_tq_props *props, pco_binary **binary) { unreachable("finishme: pvr_uscgen_tq"); }