diff --git a/src/imagination/pco/pco.c b/src/imagination/pco/pco.c index eac675780e1..49596c47f76 100644 --- a/src/imagination/pco/pco.c +++ b/src/imagination/pco/pco.c @@ -30,6 +30,14 @@ pco_ctx *pco_ctx_create(const struct pvr_device_info *dev_info, void *mem_ctx) pco_debug_init(); +#ifndef NDEBUG + /* Ensure NIR debug variables are processed. */ + nir_process_debug_variable(); +#endif /* NDEBUG */ + + pco_setup_spirv_options(dev_info, &ctx->spirv_options); + pco_setup_nir_options(dev_info, &ctx->nir_options); + return ctx; } @@ -42,7 +50,6 @@ pco_ctx *pco_ctx_create(const struct pvr_device_info *dev_info, void *mem_ctx) */ const struct spirv_to_nir_options *pco_spirv_options(pco_ctx *ctx) { - unreachable("finishme: pco_spirv_options"); return &ctx->spirv_options; } @@ -55,6 +62,5 @@ const struct spirv_to_nir_options *pco_spirv_options(pco_ctx *ctx) */ const nir_shader_compiler_options *pco_nir_options(pco_ctx *ctx) { - unreachable("finishme: pco_nir_options"); return &ctx->nir_options; } diff --git a/src/imagination/pco/pco_internal.h b/src/imagination/pco/pco_internal.h index 4e630195eed..3031b8fef91 100644 --- a/src/imagination/pco/pco_internal.h +++ b/src/imagination/pco/pco_internal.h @@ -32,6 +32,11 @@ typedef struct _pco_ctx { struct spirv_to_nir_options spirv_options; } pco_ctx; +void pco_setup_spirv_options(const struct pvr_device_info *dev_info, + struct spirv_to_nir_options *spirv_options); +void pco_setup_nir_options(const struct pvr_device_info *dev_info, + nir_shader_compiler_options *nir_options); + /* Debug. */ enum pco_debug { PCO_DEBUG_VAL_SKIP = BITFIELD64_BIT(0), diff --git a/src/imagination/pco/pco_nir.c b/src/imagination/pco/pco_nir.c index 5c3566ba472..ed6daf84a26 100644 --- a/src/imagination/pco/pco_nir.c +++ b/src/imagination/pco/pco_nir.c @@ -15,6 +15,44 @@ #include +/** Base/common SPIR-V to NIR options. */ +static const struct spirv_to_nir_options pco_base_spirv_options = { + .environment = NIR_SPIRV_VULKAN, +}; + +/** Base/common NIR options. */ +static const nir_shader_compiler_options pco_base_nir_options = {}; + +/** + * \brief Sets up device/core-specific SPIR-V to NIR options. + * + * \param[in] dev_info Device info. + * \param[out] spirv_options SPIR-V to NIR options. + */ +void pco_setup_spirv_options(const struct pvr_device_info *dev_info, + struct spirv_to_nir_options *spirv_options) +{ + memcpy(spirv_options, &pco_base_spirv_options, sizeof(*spirv_options)); + + /* TODO: Device/core-dependent options. */ + puts("finishme: pco_setup_spirv_options"); +} + +/** + * \brief Sets up device/core-specific NIR options. + * + * \param[in] dev_info Device info. + * \param[out] nir_options NIR options. + */ +void pco_setup_nir_options(const struct pvr_device_info *dev_info, + nir_shader_compiler_options *nir_options) +{ + memcpy(nir_options, &pco_base_nir_options, sizeof(*nir_options)); + + /* TODO: Device/core-dependent options. */ + puts("finishme: pco_setup_nir_options"); +} + /** * \brief Runs pre-processing passes on a NIR shader. *