mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-04 00:49:02 -06:00 
			
		
		
		
	glsl: Remove Signed Integer variables
This commit is contained in:
		@@ -69,21 +69,11 @@ public:
 | 
			
		||||
        Add<GlslVarType::U32>(format_str, inst, args...);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    template <typename... Args>
 | 
			
		||||
    void AddS32(const char* format_str, IR::Inst& inst, Args&&... args) {
 | 
			
		||||
        Add<GlslVarType::S32>(format_str, inst, args...);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    template <typename... Args>
 | 
			
		||||
    void AddF32(const char* format_str, IR::Inst& inst, Args&&... args) {
 | 
			
		||||
        Add<GlslVarType::F32>(format_str, inst, args...);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    template <typename... Args>
 | 
			
		||||
    void AddS64(const char* format_str, IR::Inst& inst, Args&&... args) {
 | 
			
		||||
        Add<GlslVarType::S64>(format_str, inst, args...);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    template <typename... Args>
 | 
			
		||||
    void AddU64(const char* format_str, IR::Inst& inst, Args&&... args) {
 | 
			
		||||
        Add<GlslVarType::U64>(format_str, inst, args...);
 | 
			
		||||
 
 | 
			
		||||
@@ -183,7 +183,7 @@ void EmitStorageAtomicIAdd64(EmitContext& ctx, IR::Inst& inst, const IR::Value&
 | 
			
		||||
void EmitStorageAtomicSMin64(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
 | 
			
		||||
                             const IR::Value& offset, std::string_view value) {
 | 
			
		||||
    // LOG_WARNING(..., "Op falling to non-atomic");
 | 
			
		||||
    ctx.AddS64("{}=packInt2x32(ivec2({}_ssbo{}[{}>>2],{}_ssbo{}[({}>>2)+1]));", inst,
 | 
			
		||||
    ctx.AddU64("{}=packInt2x32(ivec2({}_ssbo{}[{}>>2],{}_ssbo{}[({}>>2)+1]));", inst,
 | 
			
		||||
               ctx.stage_name, binding.U32(), ctx.var_alloc.Consume(offset), ctx.stage_name,
 | 
			
		||||
               binding.U32(), ctx.var_alloc.Consume(offset));
 | 
			
		||||
    ctx.Add("for(int i=0;i<2;++i){{ "
 | 
			
		||||
@@ -208,7 +208,7 @@ void EmitStorageAtomicUMin64(EmitContext& ctx, IR::Inst& inst, const IR::Value&
 | 
			
		||||
void EmitStorageAtomicSMax64(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
 | 
			
		||||
                             const IR::Value& offset, std::string_view value) {
 | 
			
		||||
    // LOG_WARNING(..., "Op falling to non-atomic");
 | 
			
		||||
    ctx.AddS64("{}=packInt2x32(ivec2({}_ssbo{}[{}>>2],{}_ssbo{}[({}>>2)+1]));", inst,
 | 
			
		||||
    ctx.AddU64("{}=packInt2x32(ivec2({}_ssbo{}[{}>>2],{}_ssbo{}[({}>>2)+1]));", inst,
 | 
			
		||||
               ctx.stage_name, binding.U32(), ctx.var_alloc.Consume(offset), ctx.stage_name,
 | 
			
		||||
               binding.U32(), ctx.var_alloc.Consume(offset));
 | 
			
		||||
    ctx.Add("for(int i=0;i<2;++i){{ "
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ void EmitConvertS16F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::I
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EmitConvertS16F32(EmitContext& ctx, IR::Inst& inst, std::string_view value) {
 | 
			
		||||
    ctx.AddS32("{}=(int({})&0xffff)|(bitfieldExtract(int({}),31,1)<<15);", inst, value, value);
 | 
			
		||||
    ctx.AddU32("{}=(int({})&0xffff)|(bitfieldExtract(int({}),31,1)<<15);", inst, value, value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EmitConvertS16F64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
 | 
			
		||||
@@ -29,11 +29,11 @@ void EmitConvertS32F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::I
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EmitConvertS32F32(EmitContext& ctx, IR::Inst& inst, std::string_view value) {
 | 
			
		||||
    ctx.AddS32("{}=int({});", inst, value);
 | 
			
		||||
    ctx.AddU32("{}=int({});", inst, value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EmitConvertS32F64(EmitContext& ctx, IR::Inst& inst, std::string_view value) {
 | 
			
		||||
    ctx.AddS32("{}=int({});", inst, value);
 | 
			
		||||
    ctx.AddU32("{}=int({});", inst, value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EmitConvertS64F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
 | 
			
		||||
@@ -42,11 +42,11 @@ void EmitConvertS64F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::I
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EmitConvertS64F32(EmitContext& ctx, IR::Inst& inst, std::string_view value) {
 | 
			
		||||
    ctx.AddS64("{}=int64_t(double({}));", inst, value);
 | 
			
		||||
    ctx.AddU64("{}=int64_t(double({}));", inst, value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EmitConvertS64F64(EmitContext& ctx, IR::Inst& inst, std::string_view value) {
 | 
			
		||||
    ctx.AddS64("{}=int64_t({});", inst, value);
 | 
			
		||||
    ctx.AddU64("{}=int64_t({});", inst, value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EmitConvertU16F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
 | 
			
		||||
 
 | 
			
		||||
@@ -103,7 +103,7 @@ void EmitShiftRightLogical64(EmitContext& ctx, IR::Inst& inst, std::string_view
 | 
			
		||||
 | 
			
		||||
void EmitShiftRightArithmetic32(EmitContext& ctx, IR::Inst& inst, std::string_view base,
 | 
			
		||||
                                std::string_view shift) {
 | 
			
		||||
    ctx.AddS32("{}=int({})>>{};", inst, base, shift);
 | 
			
		||||
    ctx.AddU32("{}=int({})>>{};", inst, base, shift);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EmitShiftRightArithmetic64(EmitContext& ctx, IR::Inst& inst, std::string_view base,
 | 
			
		||||
 
 | 
			
		||||
@@ -87,7 +87,7 @@ void EmitLoadStorageU8(EmitContext& ctx, IR::Inst& inst, const IR::Value& bindin
 | 
			
		||||
void EmitLoadStorageS8(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
 | 
			
		||||
                       const IR::Value& offset) {
 | 
			
		||||
    const auto offset_var{ctx.var_alloc.Consume(offset)};
 | 
			
		||||
    ctx.AddS32("{}=bitfieldExtract(int({}_ssbo{}[{}>>2]),int({}%4)*8,8);", inst, ctx.stage_name,
 | 
			
		||||
    ctx.AddU32("{}=bitfieldExtract(int({}_ssbo{}[{}>>2]),int({}%4)*8,8);", inst, ctx.stage_name,
 | 
			
		||||
               binding.U32(), offset_var, offset_var);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -101,7 +101,7 @@ void EmitLoadStorageU16(EmitContext& ctx, IR::Inst& inst, const IR::Value& bindi
 | 
			
		||||
void EmitLoadStorageS16(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
 | 
			
		||||
                        const IR::Value& offset) {
 | 
			
		||||
    const auto offset_var{ctx.var_alloc.Consume(offset)};
 | 
			
		||||
    ctx.AddS32("{}=bitfieldExtract(int({}_ssbo{}[{}>>2]),int(({}>>1)%2)*16,16);", inst,
 | 
			
		||||
    ctx.AddU32("{}=bitfieldExtract(int({}_ssbo{}[{}>>2]),int(({}>>1)%2)*16,16);", inst,
 | 
			
		||||
               ctx.stage_name, binding.U32(), offset_var, offset_var);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@ void EmitLoadSharedU8(EmitContext& ctx, IR::Inst& inst, std::string_view offset)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EmitLoadSharedS8(EmitContext& ctx, IR::Inst& inst, std::string_view offset) {
 | 
			
		||||
    ctx.AddS32("{}=bitfieldExtract(int(smem[{}>>2]),int({}%4)*8,8);", inst, offset, offset);
 | 
			
		||||
    ctx.AddU32("{}=bitfieldExtract(int(smem[{}>>2]),int({}%4)*8,8);", inst, offset, offset);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EmitLoadSharedU16(EmitContext& ctx, IR::Inst& inst, std::string_view offset) {
 | 
			
		||||
@@ -22,7 +22,7 @@ void EmitLoadSharedU16(EmitContext& ctx, IR::Inst& inst, std::string_view offset
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EmitLoadSharedS16(EmitContext& ctx, IR::Inst& inst, std::string_view offset) {
 | 
			
		||||
    ctx.AddS32("{}=bitfieldExtract(int(smem[{}>>2]),int(({}>>1)%2)*16,16);", inst, offset, offset);
 | 
			
		||||
    ctx.AddU32("{}=bitfieldExtract(int(smem[{}>>2]),int(({}>>1)%2)*16,16);", inst, offset, offset);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EmitLoadSharedU32(EmitContext& ctx, IR::Inst& inst, std::string_view offset) {
 | 
			
		||||
 
 | 
			
		||||
@@ -21,12 +21,8 @@ std::string TypePrefix(GlslVarType type) {
 | 
			
		||||
        return "f16x2_";
 | 
			
		||||
    case GlslVarType::U32:
 | 
			
		||||
        return "u_";
 | 
			
		||||
    case GlslVarType::S32:
 | 
			
		||||
        return "s_";
 | 
			
		||||
    case GlslVarType::F32:
 | 
			
		||||
        return "f_";
 | 
			
		||||
    case GlslVarType::S64:
 | 
			
		||||
        return "s64_";
 | 
			
		||||
    case GlslVarType::U64:
 | 
			
		||||
        return "u64_";
 | 
			
		||||
    case GlslVarType::F64:
 | 
			
		||||
@@ -213,13 +209,9 @@ std::string VarAlloc::GetGlslType(GlslVarType type) const {
 | 
			
		||||
        return "f16vec2";
 | 
			
		||||
    case GlslVarType::U32:
 | 
			
		||||
        return "uint";
 | 
			
		||||
    case GlslVarType::S32:
 | 
			
		||||
        return "int";
 | 
			
		||||
    case GlslVarType::F32:
 | 
			
		||||
    case GlslVarType::PrecF32:
 | 
			
		||||
        return "float";
 | 
			
		||||
    case GlslVarType::S64:
 | 
			
		||||
        return "int64_t";
 | 
			
		||||
    case GlslVarType::U64:
 | 
			
		||||
        return "uint64_t";
 | 
			
		||||
    case GlslVarType::F64:
 | 
			
		||||
@@ -252,12 +244,8 @@ VarAlloc::UseTracker& VarAlloc::GetUseTracker(GlslVarType type) {
 | 
			
		||||
        return var_f16x2;
 | 
			
		||||
    case GlslVarType::U32:
 | 
			
		||||
        return var_u32;
 | 
			
		||||
    case GlslVarType::S32:
 | 
			
		||||
        return var_s32;
 | 
			
		||||
    case GlslVarType::F32:
 | 
			
		||||
        return var_f32;
 | 
			
		||||
    case GlslVarType::S64:
 | 
			
		||||
        return var_s64;
 | 
			
		||||
    case GlslVarType::U64:
 | 
			
		||||
        return var_u64;
 | 
			
		||||
    case GlslVarType::F64:
 | 
			
		||||
@@ -291,12 +279,8 @@ const VarAlloc::UseTracker& VarAlloc::GetUseTracker(GlslVarType type) const {
 | 
			
		||||
        return var_f16x2;
 | 
			
		||||
    case GlslVarType::U32:
 | 
			
		||||
        return var_u32;
 | 
			
		||||
    case GlslVarType::S32:
 | 
			
		||||
        return var_s32;
 | 
			
		||||
    case GlslVarType::F32:
 | 
			
		||||
        return var_f32;
 | 
			
		||||
    case GlslVarType::S64:
 | 
			
		||||
        return var_s64;
 | 
			
		||||
    case GlslVarType::U64:
 | 
			
		||||
        return var_u64;
 | 
			
		||||
    case GlslVarType::F64:
 | 
			
		||||
 
 | 
			
		||||
@@ -21,10 +21,8 @@ namespace Shader::Backend::GLSL {
 | 
			
		||||
enum class GlslVarType : u32 {
 | 
			
		||||
    U1,
 | 
			
		||||
    F16x2,
 | 
			
		||||
    S32,
 | 
			
		||||
    U32,
 | 
			
		||||
    F32,
 | 
			
		||||
    S64,
 | 
			
		||||
    U64,
 | 
			
		||||
    F64,
 | 
			
		||||
    U32x2,
 | 
			
		||||
@@ -42,7 +40,7 @@ struct Id {
 | 
			
		||||
    union {
 | 
			
		||||
        u32 raw;
 | 
			
		||||
        BitField<0, 1, u32> is_valid;
 | 
			
		||||
        BitField<1, 5, GlslVarType> type;
 | 
			
		||||
        BitField<1, 4, GlslVarType> type;
 | 
			
		||||
        BitField<6, 26, u32> index;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
@@ -90,7 +88,6 @@ private:
 | 
			
		||||
 | 
			
		||||
    UseTracker var_bool{};
 | 
			
		||||
    UseTracker var_f16x2{};
 | 
			
		||||
    UseTracker var_s32{};
 | 
			
		||||
    UseTracker var_u32{};
 | 
			
		||||
    UseTracker var_u32x2{};
 | 
			
		||||
    UseTracker var_u32x3{};
 | 
			
		||||
@@ -100,7 +97,6 @@ private:
 | 
			
		||||
    UseTracker var_f32x3{};
 | 
			
		||||
    UseTracker var_f32x4{};
 | 
			
		||||
    UseTracker var_u64{};
 | 
			
		||||
    UseTracker var_s64{};
 | 
			
		||||
    UseTracker var_f64{};
 | 
			
		||||
    UseTracker var_precf32{};
 | 
			
		||||
    UseTracker var_precf64{};
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user