citra-emu
/
citra
Archived
1
0
Fork 0

(gl/vk)_shader_gen: Use floor instead of int cast (#6885)

This commit is contained in:
GPUCode 2023-08-17 23:16:28 +03:00 committed by GitHub
parent 1d3bf64f13
commit bc0bf4d3d2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 8 deletions

View File

@ -1246,13 +1246,13 @@ float LookupLightingLUT(int lut_index, int index, float delta) {
} }
float LookupLightingLUTUnsigned(int lut_index, float pos) { float LookupLightingLUTUnsigned(int lut_index, float pos) {
int index = clamp(int(pos * 256.0), 0, 255); int index = int(clamp(floor(pos * 256.0), 0.f, 255.f));
float delta = pos * 256.0 - float(index); float delta = pos * 256.0 - float(index);
return LookupLightingLUT(lut_index, index, delta); return LookupLightingLUT(lut_index, index, delta);
} }
float LookupLightingLUTSigned(int lut_index, float pos) { float LookupLightingLUTSigned(int lut_index, float pos) {
int index = clamp(int(pos * 128.0), -128, 127); int index = int(clamp(floor(pos * 128.0), -128.f, 127.f));
float delta = pos * 128.0 - float(index); float delta = pos * 128.0 - float(index);
if (index < 0) index += 256; if (index < 0) index += 256;
return LookupLightingLUT(lut_index, index, delta); return LookupLightingLUT(lut_index, index, delta);

View File

@ -1247,13 +1247,13 @@ float LookupLightingLUT(int lut_index, int index, float delta) {
} }
float LookupLightingLUTUnsigned(int lut_index, float pos) { float LookupLightingLUTUnsigned(int lut_index, float pos) {
int index = clamp(int(pos * 256.0), 0, 255); int index = int(clamp(floor(pos * 256.0), 0.f, 255.f));
float delta = pos * 256.0 - float(index); float delta = pos * 256.0 - float(index);
return LookupLightingLUT(lut_index, index, delta); return LookupLightingLUT(lut_index, index, delta);
} }
float LookupLightingLUTSigned(int lut_index, float pos) { float LookupLightingLUTSigned(int lut_index, float pos) {
int index = clamp(int(pos * 128.0), -128, 127); int index = int(clamp(floor(pos * 128.0), -128.f, 127.f));
float delta = pos * 128.0 - float(index); float delta = pos * 128.0 - float(index);
if (index < 0) index += 256; if (index < 0) index += 256;
return LookupLightingLUT(lut_index, index, delta); return LookupLightingLUT(lut_index, index, delta);

View File

@ -291,16 +291,18 @@ void FragmentModule::WriteLighting() {
} }
const auto lookup_lighting_lut_unsigned = [this](Id lut_index, Id pos) -> Id { const auto lookup_lighting_lut_unsigned = [this](Id lut_index, Id pos) -> Id {
const Id pos_int{OpConvertFToS(i32_id, OpFMul(f32_id, pos, ConstF32(256.f)))}; const Id pos_floor{OpFloor(f32_id, OpFMul(f32_id, pos, ConstF32(256.f)))};
const Id index{OpSClamp(i32_id, pos_int, ConstS32(0), ConstS32(255))}; const Id index_float{OpFClamp(f32_id, pos_floor, ConstF32(0.f), ConstF32(255.f))};
const Id index{OpConvertFToS(i32_id, index_float)};
const Id neg_index{OpFNegate(f32_id, OpConvertSToF(f32_id, index))}; const Id neg_index{OpFNegate(f32_id, OpConvertSToF(f32_id, index))};
const Id delta{OpFma(f32_id, pos, ConstF32(256.f), neg_index)}; const Id delta{OpFma(f32_id, pos, ConstF32(256.f), neg_index)};
return LookupLightingLUT(lut_index, index, delta); return LookupLightingLUT(lut_index, index, delta);
}; };
const auto lookup_lighting_lut_signed = [this](Id lut_index, Id pos) -> Id { const auto lookup_lighting_lut_signed = [this](Id lut_index, Id pos) -> Id {
const Id pos_int{OpConvertFToS(i32_id, OpFMul(f32_id, pos, ConstF32(128.f)))}; const Id pos_floor{OpFloor(f32_id, OpFMul(f32_id, pos, ConstF32(128.f)))};
const Id index{OpSClamp(i32_id, pos_int, ConstS32(-128), ConstS32(127))}; const Id index_float{OpFClamp(f32_id, pos_floor, ConstF32(-128.f), ConstF32(127.f))};
const Id index{OpConvertFToS(i32_id, index_float)};
const Id neg_index{OpFNegate(f32_id, OpConvertSToF(f32_id, index))}; const Id neg_index{OpFNegate(f32_id, OpConvertSToF(f32_id, index))};
const Id delta{OpFma(f32_id, pos, ConstF32(128.f), neg_index)}; const Id delta{OpFma(f32_id, pos, ConstF32(128.f), neg_index)};
const Id increment{ const Id increment{