diff options
| author | ameerj <52414509+ameerj@users.noreply.github.com> | 2023-01-26 23:24:19 -0500 | 
|---|---|---|
| committer | ameerj <52414509+ameerj@users.noreply.github.com> | 2023-01-27 02:09:18 -0500 | 
| commit | 0f795603fc04d873dfde99c795f3c1600ff2032c (patch) | |
| tree | b154ecea786abf83d7deed55b549cfd6f0998a75 | |
| parent | 5710e9015016c7dcf25cfddf6d9099080c202adf (diff) | |
glasm: Add MS sampler types
| -rw-r--r-- | src/shader_recompiler/backend/glasm/emit_glasm.cpp | 2 | ||||
| -rw-r--r-- | src/shader_recompiler/backend/glasm/emit_glasm_image.cpp | 11 | 
2 files changed, 8 insertions, 5 deletions
| diff --git a/src/shader_recompiler/backend/glasm/emit_glasm.cpp b/src/shader_recompiler/backend/glasm/emit_glasm.cpp index 0cb1e193e..fd4a61a4d 100644 --- a/src/shader_recompiler/backend/glasm/emit_glasm.cpp +++ b/src/shader_recompiler/backend/glasm/emit_glasm.cpp @@ -279,6 +279,8 @@ void SetupOptions(const IR::Program& program, const Profile& profile,      header += "OPTION NV_internal;"                "OPTION NV_shader_storage_buffer;"                "OPTION NV_gpu_program_fp64;"; +    // TODO: Enable only when MS is used +    header += "OPTION NV_texture_multisample;";      if (info.uses_int64_bit_atomics) {          header += "OPTION NV_shader_atomic_int64;";      } diff --git a/src/shader_recompiler/backend/glasm/emit_glasm_image.cpp b/src/shader_recompiler/backend/glasm/emit_glasm_image.cpp index e67e80fac..cf6065208 100644 --- a/src/shader_recompiler/backend/glasm/emit_glasm_image.cpp +++ b/src/shader_recompiler/backend/glasm/emit_glasm_image.cpp @@ -59,7 +59,7 @@ std::string Image(EmitContext& ctx, IR::TextureInstInfo info,      }  } -std::string_view TextureType(IR::TextureInstInfo info) { +std::string_view TextureType(IR::TextureInstInfo info, bool is_ms = false) {      if (info.is_depth) {          switch (info.type) {          case TextureType::Color1D: @@ -88,9 +88,9 @@ std::string_view TextureType(IR::TextureInstInfo info) {              return "ARRAY1D";          case TextureType::Color2D:          case TextureType::Color2DRect: -            return "2D"; +            return is_ms ? "2DMS" : "2D";          case TextureType::ColorArray2D: -            return "ARRAY2D"; +            return is_ms ? "ARRAY2DMS" : "ARRAY2D";          case TextureType::Color3D:              return "3D";          case TextureType::ColorCube: @@ -510,15 +510,16 @@ void EmitImageFetch(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,                      const IR::Value& coord, const IR::Value& offset, ScalarS32 lod, ScalarS32 ms) {      const auto info{inst.Flags<IR::TextureInstInfo>()};      const auto sparse_inst{PrepareSparse(inst)}; +    const bool is_multisample{ms.type != Type::Void};      const std::string_view sparse_mod{sparse_inst ? ".SPARSE" : ""}; -    const std::string_view type{TextureType(info)}; +    const std::string_view type{TextureType(info, is_multisample)};      const std::string texture{Texture(ctx, info, index)};      const std::string offset_vec{Offset(ctx, offset)};      const auto [coord_vec, coord_alloc]{Coord(ctx, coord)};      const Register ret{ctx.reg_alloc.Define(inst)};      if (info.type == TextureType::Buffer) {          ctx.Add("TXF.F{} {},{},{},{}{};", sparse_mod, ret, coord_vec, texture, type, offset_vec); -    } else if (ms.type != Type::Void) { +    } else if (is_multisample) {          ctx.Add("MOV.S {}.w,{};"                  "TXFMS.F{} {},{},{},{}{};",                  coord_vec, ms, sparse_mod, ret, coord_vec, texture, type, offset_vec); | 
