diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2021-04-12 02:02:44 +0200 |
---|---|---|
committer | ameerj <52414509+ameerj@users.noreply.github.com> | 2021-07-23 03:51:27 +0200 |
commit | 23b87147321d02abf47868f231f00f29b0d3b87d (patch) | |
tree | eb5e8850d0fcf34a1cb301d431e6b591ecb9295d | |
parent | pipeline_helper: Simplify descriptor objects initialization (diff) | |
download | yuzu-23b87147321d02abf47868f231f00f29b0d3b87d.tar yuzu-23b87147321d02abf47868f231f00f29b0d3b87d.tar.gz yuzu-23b87147321d02abf47868f231f00f29b0d3b87d.tar.bz2 yuzu-23b87147321d02abf47868f231f00f29b0d3b87d.tar.lz yuzu-23b87147321d02abf47868f231f00f29b0d3b87d.tar.xz yuzu-23b87147321d02abf47868f231f00f29b0d3b87d.tar.zst yuzu-23b87147321d02abf47868f231f00f29b0d3b87d.zip |
-rw-r--r-- | src/shader_recompiler/backend/spirv/emit_spirv.cpp | 3 | ||||
-rw-r--r-- | src/shader_recompiler/ir_opt/collect_shader_info_pass.cpp | 5 | ||||
-rw-r--r-- | src/shader_recompiler/shader_info.h | 1 |
3 files changed, 9 insertions, 0 deletions
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv.cpp b/src/shader_recompiler/backend/spirv/emit_spirv.cpp index 9248bd78b..3258b0cf8 100644 --- a/src/shader_recompiler/backend/spirv/emit_spirv.cpp +++ b/src/shader_recompiler/backend/spirv/emit_spirv.cpp @@ -244,6 +244,9 @@ void SetupCapabilities(const Profile& profile, const Info& info, EmitContext& ct if (info.uses_typeless_image_reads && profile.support_typeless_image_loads) { ctx.AddCapability(spv::Capability::StorageImageReadWithoutFormat); } + if (info.uses_typeless_image_writes) { + ctx.AddCapability(spv::Capability::StorageImageWriteWithoutFormat); + } // TODO: Track this usage ctx.AddCapability(spv::Capability::ImageGatherExtended); ctx.AddCapability(spv::Capability::ImageQuery); diff --git a/src/shader_recompiler/ir_opt/collect_shader_info_pass.cpp b/src/shader_recompiler/ir_opt/collect_shader_info_pass.cpp index c80d2d29c..ab529e86d 100644 --- a/src/shader_recompiler/ir_opt/collect_shader_info_pass.cpp +++ b/src/shader_recompiler/ir_opt/collect_shader_info_pass.cpp @@ -436,6 +436,11 @@ void VisitUsages(Info& info, IR::Inst& inst) { inst.GetAssociatedPseudoOperation(IR::Opcode::GetSparseFromOp) != nullptr; break; } + case IR::Opcode::ImageWrite: { + const auto flags{inst.Flags<IR::TextureInstInfo>()}; + info.uses_typeless_image_writes |= flags.image_format == ImageFormat::Typeless; + break; + } case IR::Opcode::SubgroupEqMask: case IR::Opcode::SubgroupLtMask: case IR::Opcode::SubgroupLeMask: diff --git a/src/shader_recompiler/shader_info.h b/src/shader_recompiler/shader_info.h index aa204ae37..6a51aabb5 100644 --- a/src/shader_recompiler/shader_info.h +++ b/src/shader_recompiler/shader_info.h @@ -129,6 +129,7 @@ struct Info { bool uses_subgroup_mask{}; bool uses_fswzadd{}; bool uses_typeless_image_reads{}; + bool uses_typeless_image_writes{}; bool uses_shared_increment{}; bool uses_shared_decrement{}; bool uses_global_increment{}; |