mirror of
https://github.com/mpv-player/mpv
synced 2024-12-25 00:02:13 +00:00
5bcac8580d
This option has been deprecated upstream for a long time, probably doesn't even work anymore, and won't work moving forwards as we replace the vulkan code by libplacebo wrappers. I haven't removed the option completely yet since in theory we could still add support for e.g. a native glslang wrapper in the future. But most likely the future of this code is deletion. As an aside, fix an issue where the man page didn't mention d3d11.
71 lines
1.8 KiB
C
71 lines
1.8 KiB
C
#include "common/msg.h"
|
|
#include "options/m_config.h"
|
|
|
|
#include "spirv.h"
|
|
#include "config.h"
|
|
|
|
extern const struct spirv_compiler_fns spirv_shaderc;
|
|
|
|
// in probe-order
|
|
enum {
|
|
SPIRV_AUTO = 0,
|
|
SPIRV_SHADERC, // generally preferred, but not packaged everywhere
|
|
};
|
|
|
|
static const struct spirv_compiler_fns *compilers[] = {
|
|
#if HAVE_SHADERC
|
|
[SPIRV_SHADERC] = &spirv_shaderc,
|
|
#endif
|
|
};
|
|
|
|
static const struct m_opt_choice_alternatives compiler_choices[] = {
|
|
{"auto", SPIRV_AUTO},
|
|
#if HAVE_SHADERC
|
|
{"shaderc", SPIRV_SHADERC},
|
|
#endif
|
|
{0}
|
|
};
|
|
|
|
struct spirv_opts {
|
|
int compiler;
|
|
};
|
|
|
|
#define OPT_BASE_STRUCT struct spirv_opts
|
|
const struct m_sub_options spirv_conf = {
|
|
.opts = (const struct m_option[]) {
|
|
OPT_CHOICE_C("spirv-compiler", compiler, 0, compiler_choices),
|
|
{0}
|
|
},
|
|
.size = sizeof(struct spirv_opts),
|
|
};
|
|
|
|
bool spirv_compiler_init(struct ra_ctx *ctx)
|
|
{
|
|
void *tmp = talloc_new(NULL);
|
|
struct spirv_opts *opts = mp_get_config_group(tmp, ctx->global, &spirv_conf);
|
|
int compiler = opts->compiler;
|
|
talloc_free(tmp);
|
|
|
|
for (int i = SPIRV_AUTO+1; i < MP_ARRAY_SIZE(compilers); i++) {
|
|
if (compiler != SPIRV_AUTO && i != compiler)
|
|
continue;
|
|
if (!compilers[i])
|
|
continue;
|
|
|
|
ctx->spirv = talloc_zero(ctx, struct spirv_compiler);
|
|
ctx->spirv->log = ctx->log,
|
|
ctx->spirv->fns = compilers[i];
|
|
|
|
const char *name = m_opt_choice_str(compiler_choices, i);
|
|
strncpy(ctx->spirv->name, name, sizeof(ctx->spirv->name) - 1);
|
|
MP_VERBOSE(ctx, "Initializing SPIR-V compiler '%s'\n", name);
|
|
if (ctx->spirv->fns->init(ctx))
|
|
return true;
|
|
talloc_free(ctx->spirv);
|
|
ctx->spirv = NULL;
|
|
}
|
|
|
|
MP_ERR(ctx, "Failed initializing SPIR-V compiler!\n");
|
|
return false;
|
|
}
|