mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 20:28:04 +02:00
microsoft/compiler: Map I/O base locations to input IDs
When dealing with a vertex input that takes multiple rows, the value of nir_intrinsic_base points to a driver-location-based index, but we need to emit a location-based index (or more specifically, an index that increments once per input, not once per register). Add a mapping to the module of base -> ID. Reviewed-by: Bill Kristiansen <billkris@microsoft.com> Reviewed-By: Sil Vilerino <sivileri@microsoft.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14837>
This commit is contained in:
parent
efe5c2d6f3
commit
eb0cefae6d
3 changed files with 10 additions and 1 deletions
|
|
@ -197,6 +197,7 @@ struct dxil_module {
|
|||
struct dxil_signature_record inputs[DXIL_SHADER_MAX_IO_ROWS];
|
||||
struct dxil_signature_record outputs[DXIL_SHADER_MAX_IO_ROWS];
|
||||
struct dxil_signature_record patch_consts[DXIL_SHADER_MAX_IO_ROWS];
|
||||
unsigned input_mappings[DXIL_SHADER_MAX_IO_ROWS];
|
||||
|
||||
struct dxil_psv_signature_element psv_inputs[DXIL_SHADER_MAX_IO_ROWS];
|
||||
struct dxil_psv_signature_element psv_outputs[DXIL_SHADER_MAX_IO_ROWS];
|
||||
|
|
|
|||
|
|
@ -541,6 +541,11 @@ get_input_signature_group(struct dxil_module *mod, const struct dxil_mdnode **in
|
|||
mod->inputs[num_inputs].sysvalue = semantic.sysvalue_name;
|
||||
*row_iter = get_additional_semantic_info(s, var, &semantic, *row_iter, input_clip_size);
|
||||
|
||||
if (semantic.start_row >= 0) {
|
||||
for (unsigned i = 0; i < semantic.rows; ++i)
|
||||
mod->input_mappings[semantic.start_row + i] = num_inputs;
|
||||
}
|
||||
|
||||
mod->inputs[num_inputs].name = ralloc_strdup(mod->ralloc_ctx,
|
||||
semantic.name);
|
||||
mod->inputs[num_inputs].num_elements = semantic.rows;
|
||||
|
|
|
|||
|
|
@ -3199,7 +3199,10 @@ emit_load_input_via_intrinsic(struct ntd_context *ctx, nir_intrinsic_instr *intr
|
|||
if (!opcode)
|
||||
return false;
|
||||
|
||||
const struct dxil_value *input_id = dxil_module_get_int32_const(&ctx->mod, nir_intrinsic_base(intr));
|
||||
const struct dxil_value *input_id = dxil_module_get_int32_const(&ctx->mod,
|
||||
is_patch_constant || is_output_control_point ?
|
||||
nir_intrinsic_base(intr) :
|
||||
ctx->mod.input_mappings[nir_intrinsic_base(intr)]);
|
||||
if (!input_id)
|
||||
return false;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue