summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/shader_recompiler/backend/spirv/emit_spirv_atomic.cpp4
-rw-r--r--src/shader_recompiler/ir_opt/collect_shader_info_pass.cpp2
2 files changed, 3 insertions, 3 deletions
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_atomic.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_atomic.cpp
index 0d37b405c..46ba52a25 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv_atomic.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_spirv_atomic.cpp
@@ -74,7 +74,7 @@ Id StorageAtomicU64(EmitContext& ctx, const IR::Value& binding, const IR::Value&
74 const auto [scope, semantics]{AtomicArgs(ctx)}; 74 const auto [scope, semantics]{AtomicArgs(ctx)};
75 return (ctx.*atomic_func)(ctx.U64, pointer, scope, semantics, value); 75 return (ctx.*atomic_func)(ctx.U64, pointer, scope, semantics, value);
76 } 76 }
77 LOG_ERROR(Shader_SPIRV, "Int64 atomics not supported, fallback to non-atomic"); 77 LOG_WARNING(Shader_SPIRV, "Int64 atomics not supported, fallback to non-atomic");
78 const Id pointer{StoragePointer(ctx, ctx.storage_types.U32x2, &StorageDefinitions::U32x2, 78 const Id pointer{StoragePointer(ctx, ctx.storage_types.U32x2, &StorageDefinitions::U32x2,
79 binding, offset, sizeof(u32[2]))}; 79 binding, offset, sizeof(u32[2]))};
80 const Id original_value{ctx.OpBitcast(ctx.U64, ctx.OpLoad(ctx.U32[2], pointer))}; 80 const Id original_value{ctx.OpBitcast(ctx.U64, ctx.OpLoad(ctx.U32[2], pointer))};
@@ -267,7 +267,7 @@ Id EmitStorageAtomicExchange64(EmitContext& ctx, const IR::Value& binding, const
267 const auto [scope, semantics]{AtomicArgs(ctx)}; 267 const auto [scope, semantics]{AtomicArgs(ctx)};
268 return ctx.OpAtomicExchange(ctx.U64, pointer, scope, semantics, value); 268 return ctx.OpAtomicExchange(ctx.U64, pointer, scope, semantics, value);
269 } 269 }
270 LOG_ERROR(Shader_SPIRV, "Int64 atomics not supported, fallback to non-atomic"); 270 LOG_WARNING(Shader_SPIRV, "Int64 atomics not supported, fallback to non-atomic");
271 const Id pointer{StoragePointer(ctx, ctx.storage_types.U32x2, &StorageDefinitions::U32x2, 271 const Id pointer{StoragePointer(ctx, ctx.storage_types.U32x2, &StorageDefinitions::U32x2,
272 binding, offset, sizeof(u32[2]))}; 272 binding, offset, sizeof(u32[2]))};
273 const Id original{ctx.OpBitcast(ctx.U64, ctx.OpLoad(ctx.U32[2], pointer))}; 273 const Id original{ctx.OpBitcast(ctx.U64, ctx.OpLoad(ctx.U32[2], pointer))};
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 a78c469be..b6a20f904 100644
--- a/src/shader_recompiler/ir_opt/collect_shader_info_pass.cpp
+++ b/src/shader_recompiler/ir_opt/collect_shader_info_pass.cpp
@@ -688,7 +688,7 @@ void VisitUsages(Info& info, IR::Inst& inst) {
688 case IR::Opcode::StorageAtomicAnd64: 688 case IR::Opcode::StorageAtomicAnd64:
689 case IR::Opcode::StorageAtomicOr64: 689 case IR::Opcode::StorageAtomicOr64:
690 case IR::Opcode::StorageAtomicXor64: 690 case IR::Opcode::StorageAtomicXor64:
691 info.used_storage_buffer_types |= IR::Type::U64; 691 info.used_storage_buffer_types |= IR::Type::U64 | IR::Type::U32x2;
692 info.uses_int64_bit_atomics = true; 692 info.uses_int64_bit_atomics = true;
693 break; 693 break;
694 case IR::Opcode::BindlessImageAtomicIAdd32: 694 case IR::Opcode::BindlessImageAtomicIAdd32: