summaryrefslogtreecommitdiffstats
path: root/src/shader_recompiler/backend
diff options
context:
space:
mode:
authorFernandoS27 <fsahmkow27@gmail.com>2021-03-30 08:41:21 +0200
committerameerj <52414509+ameerj@users.noreply.github.com>2021-07-23 03:51:25 +0200
commit4d0d29fc2092bf02e102b8bac9cfa1b509274901 (patch)
tree97fbee1b64a0e5d8189cac30e8dd0a1a72a8ec4a /src/shader_recompiler/backend
parentshader: Always pass a lod for TexelFetch (diff)
downloadyuzu-4d0d29fc2092bf02e102b8bac9cfa1b509274901.tar
yuzu-4d0d29fc2092bf02e102b8bac9cfa1b509274901.tar.gz
yuzu-4d0d29fc2092bf02e102b8bac9cfa1b509274901.tar.bz2
yuzu-4d0d29fc2092bf02e102b8bac9cfa1b509274901.tar.lz
yuzu-4d0d29fc2092bf02e102b8bac9cfa1b509274901.tar.xz
yuzu-4d0d29fc2092bf02e102b8bac9cfa1b509274901.tar.zst
yuzu-4d0d29fc2092bf02e102b8bac9cfa1b509274901.zip
Diffstat (limited to 'src/shader_recompiler/backend')
-rw-r--r--src/shader_recompiler/backend/spirv/emit_spirv_image.cpp30
1 files changed, 15 insertions, 15 deletions
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp
index 1eba9cc00..03d2ec73e 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp
@@ -72,20 +72,19 @@ public:
explicit ImageOperands(EmitContext& ctx, bool has_lod_clamp, Id derivates, u32 num_derivates,
Id offset, Id lod_clamp) {
if (Sirit::ValidId(derivates)) {
- boost::container::static_vector<Id, 3> deriv_x_accum;
- boost::container::static_vector<Id, 3> deriv_y_accum;
- for (size_t i = 0; i < num_derivates; i++) {
- deriv_x_accum.push_back(ctx.OpCompositeExtract(ctx.F32[1], derivates, i * 2));
- deriv_y_accum.push_back(ctx.OpCompositeExtract(ctx.F32[1], derivates, i * 2 + 1));
- }
- Id derivates_X = ctx.OpCompositeConstruct(
- ctx.F32[num_derivates], std::span{deriv_x_accum.data(), deriv_x_accum.size()});
- Id derivates_Y = ctx.OpCompositeConstruct(
- ctx.F32[num_derivates], std::span{deriv_y_accum.data(), deriv_y_accum.size()});
- Add(spv::ImageOperandsMask::Grad, derivates_X, derivates_Y);
- } else {
throw LogicError("Derivates must be present");
}
+ boost::container::static_vector<Id, 3> deriv_x_accum;
+ boost::container::static_vector<Id, 3> deriv_y_accum;
+ for (size_t i = 0; i < num_derivates; i++) {
+ deriv_x_accum.push_back(ctx.OpCompositeExtract(ctx.F32[1], derivates, i * 2));
+ deriv_y_accum.push_back(ctx.OpCompositeExtract(ctx.F32[1], derivates, i * 2 + 1));
+ }
+ const Id derivates_X{ctx.OpCompositeConstruct(
+ ctx.F32[num_derivates], std::span{deriv_x_accum.data(), deriv_x_accum.size()})};
+ const Id derivates_Y{ctx.OpCompositeConstruct(
+ ctx.F32[num_derivates], std::span{deriv_y_accum.data(), deriv_y_accum.size()})};
+ Add(spv::ImageOperandsMask::Grad, derivates_X, derivates_Y);
if (Sirit::ValidId(offset)) {
Add(spv::ImageOperandsMask::Offset, offset);
}
@@ -100,10 +99,10 @@ public:
operands.push_back(value);
}
- void Add(spv::ImageOperandsMask new_mask, Id value, Id value_2) {
+ void Add(spv::ImageOperandsMask new_mask, Id value_1, Id value_2) {
mask = static_cast<spv::ImageOperandsMask>(static_cast<unsigned>(mask) |
static_cast<unsigned>(new_mask));
- operands.push_back(value);
+ operands.push_back(value_1);
operands.push_back(value_2);
}
@@ -345,7 +344,8 @@ Id EmitImageQueryLod(EmitContext& ctx, IR::Inst*, const IR::Value& index, Id coo
Id EmitImageGradient(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords,
Id derivates, Id offset, Id lod_clamp) {
const auto info{inst->Flags<IR::TextureInstInfo>()};
- const ImageOperands operands(ctx, info.has_lod_clamp != 0, derivates, info.num_derivates, offset, lod_clamp);
+ const ImageOperands operands(ctx, info.has_lod_clamp != 0, derivates, info.num_derivates,
+ offset, lod_clamp);
return Emit(&EmitContext::OpImageSparseSampleExplicitLod,
&EmitContext::OpImageSampleExplicitLod, ctx, inst, ctx.F32[4], Texture(ctx, index),
coords, operands.Mask(), operands.Span());