This works around rendering issues in Skyrim caused by DXVK missing a decoration. --- src/compiler/spirv/vtn_variables.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/src/compiler/spirv/vtn_variables.c b/src/compiler/spirv/vtn_variables.c index 574f422ceab..24b278e17fd 100644 --- a/src/compiler/spirv/vtn_variables.c +++ b/src/compiler/spirv/vtn_variables.c @@ -1752,8 +1752,24 @@ vtn_create_variable(struct vtn_builder *b, struct vtn_value *val, var->var->data.descriptor_set = var->descriptor_set; var->var->data.index = var->input_attachment_index; - if (glsl_type_is_image(without_array->type)) + if (glsl_type_is_image(without_array->type)) { var->var->data.image.format = without_array->image_format; + + /* The requirement that the NonReadable decoration be set was added + * as a clarification to the Vulkan spec in version 1.1.76 and not + * all apps respect it. Setting it implicitly inside spirv_to_nir + * fixes rendering issues in Skyrim on DXVK as of June 27, 2018. + */ + if (var->var->data.image.format == 0 && + !var->var->data.image.write_only && + !b->options->caps.image_read_without_format) { + vtn_warn("Image variable created an unknown format and without " + "the NonReadable decoration set but the driver does not " + "support shaderStorageImageReadWithoutFormat. Setting " + "the decoration implicitly to work around the problem."); + var->var->data.image.write_only = true; + } + } } if (var->mode == vtn_variable_mode_local) { -- 2.17.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev