spirv: Convert the supported_extensions struct to spirv_options
This is a bit more general and lets us pass additional options into the spirv_to_nir pass beyond what capabilities we support. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
This commit is contained in:
@@ -196,7 +196,8 @@ radv_shader_compile_to_nir(struct radv_device *device,
|
||||
spec_entries[i].data32 = *(const uint32_t *)data;
|
||||
}
|
||||
}
|
||||
const struct nir_spirv_supported_extensions supported_ext = {
|
||||
const struct spirv_to_nir_options spirv_options = {
|
||||
.caps = {
|
||||
.draw_parameters = true,
|
||||
.float64 = true,
|
||||
.image_read_without_format = true,
|
||||
@@ -205,10 +206,12 @@ radv_shader_compile_to_nir(struct radv_device *device,
|
||||
.int64 = true,
|
||||
.multiview = true,
|
||||
.variable_pointers = true,
|
||||
},
|
||||
};
|
||||
entry_point = spirv_to_nir(spirv, module->size / 4,
|
||||
spec_entries, num_spec_entries,
|
||||
stage, entrypoint_name, &supported_ext, &nir_options);
|
||||
stage, entrypoint_name,
|
||||
&spirv_options, &nir_options);
|
||||
nir = entry_point->shader;
|
||||
assert(nir->info.stage == stage);
|
||||
nir_validate_shader(nir);
|
||||
|
@@ -42,7 +42,8 @@ struct nir_spirv_specialization {
|
||||
};
|
||||
};
|
||||
|
||||
struct nir_spirv_supported_extensions {
|
||||
struct spirv_to_nir_options {
|
||||
struct {
|
||||
bool float64;
|
||||
bool image_ms_array;
|
||||
bool tessellation;
|
||||
@@ -52,14 +53,15 @@ struct nir_spirv_supported_extensions {
|
||||
bool int64;
|
||||
bool multiview;
|
||||
bool variable_pointers;
|
||||
} caps;
|
||||
};
|
||||
|
||||
nir_function *spirv_to_nir(const uint32_t *words, size_t word_count,
|
||||
struct nir_spirv_specialization *specializations,
|
||||
unsigned num_specializations,
|
||||
gl_shader_stage stage, const char *entry_point_name,
|
||||
const struct nir_spirv_supported_extensions *ext,
|
||||
const nir_shader_compiler_options *options);
|
||||
const struct spirv_to_nir_options *options,
|
||||
const nir_shader_compiler_options *nir_options);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@@ -2675,7 +2675,7 @@ stage_for_execution_model(SpvExecutionModel model)
|
||||
}
|
||||
|
||||
#define spv_check_supported(name, cap) do { \
|
||||
if (!(b->ext && b->ext->name)) \
|
||||
if (!(b->options && b->options->caps.name)) \
|
||||
vtn_warn("Unsupported SPIR-V capability: %s", \
|
||||
spirv_capability_to_string(cap)); \
|
||||
} while(0)
|
||||
@@ -3316,8 +3316,8 @@ nir_function *
|
||||
spirv_to_nir(const uint32_t *words, size_t word_count,
|
||||
struct nir_spirv_specialization *spec, unsigned num_spec,
|
||||
gl_shader_stage stage, const char *entry_point_name,
|
||||
const struct nir_spirv_supported_extensions *ext,
|
||||
const nir_shader_compiler_options *options)
|
||||
const struct spirv_to_nir_options *options,
|
||||
const nir_shader_compiler_options *nir_options)
|
||||
{
|
||||
const uint32_t *word_end = words + word_count;
|
||||
|
||||
@@ -3339,7 +3339,7 @@ spirv_to_nir(const uint32_t *words, size_t word_count,
|
||||
exec_list_make_empty(&b->functions);
|
||||
b->entry_point_stage = stage;
|
||||
b->entry_point_name = entry_point_name;
|
||||
b->ext = ext;
|
||||
b->options = options;
|
||||
|
||||
/* Handle all the preamble instructions */
|
||||
words = vtn_foreach_instruction(b, words, word_end,
|
||||
@@ -3351,7 +3351,7 @@ spirv_to_nir(const uint32_t *words, size_t word_count,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
b->shader = nir_shader_create(NULL, stage, options, NULL);
|
||||
b->shader = nir_shader_create(NULL, stage, nir_options, NULL);
|
||||
|
||||
/* Set shader info defaults */
|
||||
b->shader->info.gs.invocations = 1;
|
||||
|
@@ -467,7 +467,7 @@ struct vtn_builder {
|
||||
nir_builder nb;
|
||||
|
||||
nir_shader *shader;
|
||||
const struct nir_spirv_supported_extensions *ext;
|
||||
const struct spirv_to_nir_options *options;
|
||||
struct vtn_block *block;
|
||||
|
||||
/* Current file, line, and column. Useful for debugging. Set
|
||||
|
@@ -132,7 +132,8 @@ anv_shader_compile_to_nir(struct anv_pipeline *pipeline,
|
||||
}
|
||||
}
|
||||
|
||||
const struct nir_spirv_supported_extensions supported_ext = {
|
||||
struct spirv_to_nir_options spirv_options = {
|
||||
.caps = {
|
||||
.float64 = device->instance->physicalDevice.info.gen >= 8,
|
||||
.int64 = device->instance->physicalDevice.info.gen >= 8,
|
||||
.tessellation = true,
|
||||
@@ -140,12 +141,13 @@ anv_shader_compile_to_nir(struct anv_pipeline *pipeline,
|
||||
.image_write_without_format = true,
|
||||
.multiview = true,
|
||||
.variable_pointers = true,
|
||||
},
|
||||
};
|
||||
|
||||
nir_function *entry_point =
|
||||
spirv_to_nir(spirv, module->size / 4,
|
||||
spec_entries, num_spec_entries,
|
||||
stage, entrypoint_name, &supported_ext, nir_options);
|
||||
stage, entrypoint_name, &spirv_options, nir_options);
|
||||
nir_shader *nir = entry_point->shader;
|
||||
assert(nir->info.stage == stage);
|
||||
nir_validate_shader(nir);
|
||||
|
Reference in New Issue
Block a user