spirv: Add support for MinLod
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
@@ -1398,6 +1398,7 @@ typedef enum {
|
|||||||
nir_tex_src_offset,
|
nir_tex_src_offset,
|
||||||
nir_tex_src_bias,
|
nir_tex_src_bias,
|
||||||
nir_tex_src_lod,
|
nir_tex_src_lod,
|
||||||
|
nir_tex_src_min_lod,
|
||||||
nir_tex_src_ms_index, /* MSAA sample index */
|
nir_tex_src_ms_index, /* MSAA sample index */
|
||||||
nir_tex_src_ms_mcs, /* MSAA compression value */
|
nir_tex_src_ms_mcs, /* MSAA compression value */
|
||||||
nir_tex_src_ddx,
|
nir_tex_src_ddx,
|
||||||
|
@@ -846,6 +846,9 @@ print_tex_instr(nir_tex_instr *instr, print_state *state)
|
|||||||
case nir_tex_src_lod:
|
case nir_tex_src_lod:
|
||||||
fprintf(fp, "(lod)");
|
fprintf(fp, "(lod)");
|
||||||
break;
|
break;
|
||||||
|
case nir_tex_src_min_lod:
|
||||||
|
fprintf(fp, "(min_lod)");
|
||||||
|
break;
|
||||||
case nir_tex_src_ms_index:
|
case nir_tex_src_ms_index:
|
||||||
fprintf(fp, "(ms_index)");
|
fprintf(fp, "(ms_index)");
|
||||||
break;
|
break;
|
||||||
|
@@ -41,6 +41,7 @@ struct spirv_supported_capabilities {
|
|||||||
bool image_read_without_format;
|
bool image_read_without_format;
|
||||||
bool image_write_without_format;
|
bool image_write_without_format;
|
||||||
bool int64;
|
bool int64;
|
||||||
|
bool min_lod;
|
||||||
bool multiview;
|
bool multiview;
|
||||||
bool variable_pointers;
|
bool variable_pointers;
|
||||||
bool storage_16bit;
|
bool storage_16bit;
|
||||||
|
@@ -2174,6 +2174,13 @@ vtn_handle_texture(struct vtn_builder *b, SpvOp opcode,
|
|||||||
texop = nir_texop_txf_ms;
|
texop = nir_texop_txf_ms;
|
||||||
(*p++) = vtn_tex_src(b, w[idx++], nir_tex_src_ms_index);
|
(*p++) = vtn_tex_src(b, w[idx++], nir_tex_src_ms_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (operands & SpvImageOperandsMinLodMask) {
|
||||||
|
vtn_assert(texop == nir_texop_tex ||
|
||||||
|
texop == nir_texop_txb ||
|
||||||
|
texop == nir_texop_txd);
|
||||||
|
(*p++) = vtn_tex_src(b, w[idx++], nir_tex_src_min_lod);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/* We should have now consumed exactly all of the arguments */
|
/* We should have now consumed exactly all of the arguments */
|
||||||
vtn_assert(idx == count);
|
vtn_assert(idx == count);
|
||||||
@@ -3419,11 +3426,14 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode,
|
|||||||
case SpvCapabilityStorageImageMultisample:
|
case SpvCapabilityStorageImageMultisample:
|
||||||
case SpvCapabilityInt8:
|
case SpvCapabilityInt8:
|
||||||
case SpvCapabilitySparseResidency:
|
case SpvCapabilitySparseResidency:
|
||||||
case SpvCapabilityMinLod:
|
|
||||||
vtn_warn("Unsupported SPIR-V capability: %s",
|
vtn_warn("Unsupported SPIR-V capability: %s",
|
||||||
spirv_capability_to_string(cap));
|
spirv_capability_to_string(cap));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SpvCapabilityMinLod:
|
||||||
|
spv_check_supported(min_lod, cap);
|
||||||
|
break;
|
||||||
|
|
||||||
case SpvCapabilityAtomicStorage:
|
case SpvCapabilityAtomicStorage:
|
||||||
spv_check_supported(atomic_storage, cap);
|
spv_check_supported(atomic_storage, cap);
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user