glsl: More FP fixes
This commit is contained in:
		| @@ -48,11 +48,16 @@ void EmitContext::DefineStorageBuffers() { | ||||
|     } | ||||
|     u32 binding{}; | ||||
|     for (const auto& desc : info.storage_buffers_descriptors) { | ||||
|         Add("layout(std430,binding={}) buffer ssbo_{}_u32{{uint ssbo{}_u32[];}};", binding, binding, | ||||
|             desc.cbuf_index, desc.count); | ||||
|         // TODO: Track ssbo data type usage | ||||
|         if (True(info.used_storage_buffer_types & IR::Type::U32) || | ||||
|             True(info.used_storage_buffer_types & IR::Type::F32)) { | ||||
|             Add("layout(std430,binding={}) buffer ssbo_{}_u32{{uint ssbo{}_u32[];}};", binding, | ||||
|                 binding, desc.cbuf_index, desc.count); | ||||
|         } | ||||
|         if (True(info.used_storage_buffer_types & IR::Type::U32x2) || | ||||
|             True(info.used_storage_buffer_types & IR::Type::F32x2)) { | ||||
|             Add("layout(std430,binding={}) buffer ssbo_{}_u64{{uvec2 ssbo{}_u64[];}};", binding, | ||||
|                 binding, desc.cbuf_index, desc.count); | ||||
|         } | ||||
|         ++binding; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -161,12 +161,12 @@ void EmitFPSaturate16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::In | ||||
|  | ||||
| void EmitFPSaturate32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||
|                       [[maybe_unused]] std::string_view value) { | ||||
|     ctx.AddF32("{}=clamp({},0.0,1.0);", inst, value); | ||||
|     ctx.AddF32("{}=min(max({},0.0),1.0);", inst, value); | ||||
| } | ||||
|  | ||||
| void EmitFPSaturate64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||
|                       [[maybe_unused]] std::string_view value) { | ||||
|     ctx.AddF64("{}=clamp({},0.0,1.0);", inst, value); | ||||
|     ctx.AddF64("{}=min(max({},0.0),1.0);", inst, value); | ||||
| } | ||||
|  | ||||
| void EmitFPClamp16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||
| @@ -180,14 +180,16 @@ void EmitFPClamp32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& | ||||
|                    [[maybe_unused]] std::string_view value, | ||||
|                    [[maybe_unused]] std::string_view min_value, | ||||
|                    [[maybe_unused]] std::string_view max_value) { | ||||
|     ctx.AddF32("{}=clamp({},float({}),float({}));", inst, value, min_value, max_value); | ||||
|     // GLSL's clamp does not produce desirable results | ||||
|     ctx.AddF32("{}=min(max({},float({})),float({}));", inst, value, min_value, max_value); | ||||
| } | ||||
|  | ||||
| void EmitFPClamp64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||
|                    [[maybe_unused]] std::string_view value, | ||||
|                    [[maybe_unused]] std::string_view min_value, | ||||
|                    [[maybe_unused]] std::string_view max_value) { | ||||
|     ctx.AddF64("{}=clamp({},double({}),double({}));", inst, value, min_value, max_value); | ||||
|     // GLSL's clamp does not produce desirable results | ||||
|     ctx.AddF64("{}=min(max({},double({})),double({}));", inst, value, min_value, max_value); | ||||
| } | ||||
|  | ||||
| void EmitFPRoundEven16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user