Merge pull request #3084 from ReinUsesLisp/cast-warnings
video_core: Treat implicit conversions as errors
This commit is contained in:
commit
cf770a68a5
|
@ -814,7 +814,7 @@ struct MicroProfile
|
||||||
|
|
||||||
inline int MicroProfileLogType(MicroProfileLogEntry Index)
|
inline int MicroProfileLogType(MicroProfileLogEntry Index)
|
||||||
{
|
{
|
||||||
return ((MP_LOG_BEGIN_MASK & Index)>>62) & 0x3;
|
return (int)(((MP_LOG_BEGIN_MASK & Index)>>62) & 0x3ULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline uint64_t MicroProfileLogTimerIndex(MicroProfileLogEntry Index)
|
inline uint64_t MicroProfileLogTimerIndex(MicroProfileLogEntry Index)
|
||||||
|
@ -861,12 +861,12 @@ T MicroProfileMax(T a, T b)
|
||||||
|
|
||||||
inline int64_t MicroProfileMsToTick(float fMs, int64_t nTicksPerSecond)
|
inline int64_t MicroProfileMsToTick(float fMs, int64_t nTicksPerSecond)
|
||||||
{
|
{
|
||||||
return (int64_t)(fMs*0.001f*nTicksPerSecond);
|
return (int64_t)(fMs*0.001f*(float)nTicksPerSecond);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline float MicroProfileTickToMsMultiplier(int64_t nTicksPerSecond)
|
inline float MicroProfileTickToMsMultiplier(int64_t nTicksPerSecond)
|
||||||
{
|
{
|
||||||
return 1000.f / nTicksPerSecond;
|
return 1000.f / (float)nTicksPerSecond;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline uint16_t MicroProfileGetGroupIndex(MicroProfileToken t)
|
inline uint16_t MicroProfileGetGroupIndex(MicroProfileToken t)
|
||||||
|
|
|
@ -180,3 +180,9 @@ target_link_libraries(video_core PRIVATE glad)
|
||||||
if (ENABLE_VULKAN)
|
if (ENABLE_VULKAN)
|
||||||
target_link_libraries(video_core PRIVATE sirit)
|
target_link_libraries(video_core PRIVATE sirit)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (MSVC)
|
||||||
|
target_compile_options(video_core PRIVATE /we4267)
|
||||||
|
else()
|
||||||
|
target_compile_options(video_core PRIVATE -Werror=conversion -Wno-error=sign-conversion)
|
||||||
|
endif()
|
||||||
|
|
|
@ -261,7 +261,8 @@ void Maxwell3D::CallMacroMethod(u32 method, std::size_t num_parameters, const u3
|
||||||
executing_macro = 0;
|
executing_macro = 0;
|
||||||
|
|
||||||
// Lookup the macro offset
|
// Lookup the macro offset
|
||||||
const u32 entry = ((method - MacroRegistersStart) >> 1) % macro_positions.size();
|
const u32 entry =
|
||||||
|
((method - MacroRegistersStart) >> 1) % static_cast<u32>(macro_positions.size());
|
||||||
|
|
||||||
// Execute the current macro.
|
// Execute the current macro.
|
||||||
macro_interpreter.Execute(macro_positions[entry], num_parameters, parameters);
|
macro_interpreter.Execute(macro_positions[entry], num_parameters, parameters);
|
||||||
|
|
|
@ -1478,7 +1478,8 @@ union Instruction {
|
||||||
u32 value = static_cast<u32>(target);
|
u32 value = static_cast<u32>(target);
|
||||||
// The branch offset is relative to the next instruction and is stored in bytes, so
|
// The branch offset is relative to the next instruction and is stored in bytes, so
|
||||||
// divide it by the size of an instruction and add 1 to it.
|
// divide it by the size of an instruction and add 1 to it.
|
||||||
return static_cast<s32>((value ^ mask) - mask) / sizeof(Instruction) + 1;
|
return static_cast<s32>((value ^ mask) - mask) / static_cast<s32>(sizeof(Instruction)) +
|
||||||
|
1;
|
||||||
}
|
}
|
||||||
} bra;
|
} bra;
|
||||||
|
|
||||||
|
@ -1492,7 +1493,8 @@ union Instruction {
|
||||||
u32 value = static_cast<u32>(target);
|
u32 value = static_cast<u32>(target);
|
||||||
// The branch offset is relative to the next instruction and is stored in bytes, so
|
// The branch offset is relative to the next instruction and is stored in bytes, so
|
||||||
// divide it by the size of an instruction and add 1 to it.
|
// divide it by the size of an instruction and add 1 to it.
|
||||||
return static_cast<s32>((value ^ mask) - mask) / sizeof(Instruction) + 1;
|
return static_cast<s32>((value ^ mask) - mask) / static_cast<s32>(sizeof(Instruction)) +
|
||||||
|
1;
|
||||||
}
|
}
|
||||||
} brx;
|
} brx;
|
||||||
|
|
||||||
|
@ -1851,11 +1853,11 @@ private:
|
||||||
const std::size_t bit_position = opcode_bitsize - i - 1;
|
const std::size_t bit_position = opcode_bitsize - i - 1;
|
||||||
switch (bitstring[i]) {
|
switch (bitstring[i]) {
|
||||||
case '0':
|
case '0':
|
||||||
mask |= 1 << bit_position;
|
mask |= static_cast<u16>(1U << bit_position);
|
||||||
break;
|
break;
|
||||||
case '1':
|
case '1':
|
||||||
expect |= 1 << bit_position;
|
expect |= static_cast<u16>(1U << bit_position);
|
||||||
mask |= 1 << bit_position;
|
mask |= static_cast<u16>(1U << bit_position);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// Ignore
|
// Ignore
|
||||||
|
|
|
@ -375,7 +375,7 @@ void RasterizerOpenGL::ConfigureFramebuffers() {
|
||||||
fbkey.color_attachments[index] = GL_COLOR_ATTACHMENT0 + regs.rt_control.GetMap(index);
|
fbkey.color_attachments[index] = GL_COLOR_ATTACHMENT0 + regs.rt_control.GetMap(index);
|
||||||
fbkey.colors[index] = std::move(color_surface);
|
fbkey.colors[index] = std::move(color_surface);
|
||||||
}
|
}
|
||||||
fbkey.colors_count = regs.rt_control.count;
|
fbkey.colors_count = static_cast<u16>(regs.rt_control.count);
|
||||||
|
|
||||||
if (depth_surface) {
|
if (depth_surface) {
|
||||||
// Assume that a surface will be written to if it is used as a framebuffer, even if
|
// Assume that a surface will be written to if it is used as a framebuffer, even if
|
||||||
|
|
|
@ -323,10 +323,12 @@ void RendererOpenGL::DrawScreenTriangles(const ScreenInfo& screen_info, float x,
|
||||||
// (e.g. handheld mode) on a 1920x1080 framebuffer.
|
// (e.g. handheld mode) on a 1920x1080 framebuffer.
|
||||||
f32 scale_u = 1.f, scale_v = 1.f;
|
f32 scale_u = 1.f, scale_v = 1.f;
|
||||||
if (framebuffer_crop_rect.GetWidth() > 0) {
|
if (framebuffer_crop_rect.GetWidth() > 0) {
|
||||||
scale_u = static_cast<f32>(framebuffer_crop_rect.GetWidth()) / screen_info.texture.width;
|
scale_u = static_cast<f32>(framebuffer_crop_rect.GetWidth()) /
|
||||||
|
static_cast<f32>(screen_info.texture.width);
|
||||||
}
|
}
|
||||||
if (framebuffer_crop_rect.GetHeight() > 0) {
|
if (framebuffer_crop_rect.GetHeight() > 0) {
|
||||||
scale_v = static_cast<f32>(framebuffer_crop_rect.GetHeight()) / screen_info.texture.height;
|
scale_v = static_cast<f32>(framebuffer_crop_rect.GetHeight()) /
|
||||||
|
static_cast<f32>(screen_info.texture.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::array<ScreenRectVertex, 4> vertices = {{
|
std::array<ScreenRectVertex, 4> vertices = {{
|
||||||
|
|
|
@ -154,10 +154,10 @@ void ShaderIR::Decode() {
|
||||||
LOG_CRITICAL(HW_GPU, "Unknown decompilation mode!");
|
LOG_CRITICAL(HW_GPU, "Unknown decompilation mode!");
|
||||||
[[fallthrough]];
|
[[fallthrough]];
|
||||||
case CompileDepth::BruteForce: {
|
case CompileDepth::BruteForce: {
|
||||||
|
const auto shader_end = static_cast<u32>(program_code.size());
|
||||||
coverage_begin = main_offset;
|
coverage_begin = main_offset;
|
||||||
const std::size_t shader_end = program_code.size();
|
|
||||||
coverage_end = shader_end;
|
coverage_end = shader_end;
|
||||||
for (u32 label = main_offset; label < shader_end; label++) {
|
for (u32 label = main_offset; label < shader_end; ++label) {
|
||||||
basic_blocks.insert({label, DecodeRange(label, label + 1)});
|
basic_blocks.insert({label, DecodeRange(label, label + 1)});
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -49,7 +49,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 GetSize() const {
|
u32 GetSize() const {
|
||||||
return max_offset + sizeof(float);
|
return max_offset + static_cast<u32>(sizeof(float));
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 GetMaxOffset() const {
|
u32 GetMaxOffset() const {
|
||||||
|
@ -165,8 +165,8 @@ public:
|
||||||
return program_manager.GetVariables();
|
return program_manager.GetVariables();
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 ConvertAddressToNvidiaSpace(const u32 address) const {
|
u32 ConvertAddressToNvidiaSpace(u32 address) const {
|
||||||
return (address - main_offset) * sizeof(Tegra::Shader::Instruction);
|
return (address - main_offset) * static_cast<u32>(sizeof(Tegra::Shader::Instruction));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns a condition code evaluated from internal flags
|
/// Returns a condition code evaluated from internal flags
|
||||||
|
|
|
@ -92,11 +92,11 @@ private:
|
||||||
const unsigned int mask = 1 << m_NextBit++;
|
const unsigned int mask = 1 << m_NextBit++;
|
||||||
|
|
||||||
// clear the bit
|
// clear the bit
|
||||||
*m_CurByte &= ~mask;
|
*m_CurByte &= static_cast<unsigned char>(~mask);
|
||||||
|
|
||||||
// Write the bit, if necessary
|
// Write the bit, if necessary
|
||||||
if (b)
|
if (b)
|
||||||
*m_CurByte |= mask;
|
*m_CurByte |= static_cast<unsigned char>(mask);
|
||||||
|
|
||||||
// Next byte?
|
// Next byte?
|
||||||
if (m_NextBit >= 8) {
|
if (m_NextBit >= 8) {
|
||||||
|
@ -137,7 +137,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t mask = (1 << (end - start + 1)) - 1;
|
uint64_t mask = (1 << (end - start + 1)) - 1;
|
||||||
return (m_Bits >> start) & mask;
|
return (m_Bits >> start) & static_cast<IntType>(mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -656,7 +656,7 @@ static IntType Replicate(const IntType& val, uint32_t numBits, uint32_t toBit) {
|
||||||
return 0;
|
return 0;
|
||||||
if (toBit == 0)
|
if (toBit == 0)
|
||||||
return 0;
|
return 0;
|
||||||
IntType v = val & ((1 << numBits) - 1);
|
IntType v = val & static_cast<IntType>((1 << numBits) - 1);
|
||||||
IntType res = v;
|
IntType res = v;
|
||||||
uint32_t reslen = numBits;
|
uint32_t reslen = numBits;
|
||||||
while (reslen < toBit) {
|
while (reslen < toBit) {
|
||||||
|
@ -666,8 +666,8 @@ static IntType Replicate(const IntType& val, uint32_t numBits, uint32_t toBit) {
|
||||||
comp = numBits - newshift;
|
comp = numBits - newshift;
|
||||||
numBits = newshift;
|
numBits = newshift;
|
||||||
}
|
}
|
||||||
res <<= numBits;
|
res = static_cast<IntType>(res << numBits);
|
||||||
res |= v >> comp;
|
res = static_cast<IntType>(res | (v >> comp));
|
||||||
reslen += numBits;
|
reslen += numBits;
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
|
@ -714,7 +714,7 @@ public:
|
||||||
// Do nothing
|
// Do nothing
|
||||||
return val;
|
return val;
|
||||||
} else if (oldDepth == 0 && newDepth != 0) {
|
} else if (oldDepth == 0 && newDepth != 0) {
|
||||||
return (1 << newDepth) - 1;
|
return static_cast<ChannelType>((1 << newDepth) - 1);
|
||||||
} else if (newDepth > oldDepth) {
|
} else if (newDepth > oldDepth) {
|
||||||
return Replicate(val, oldDepth, newDepth);
|
return Replicate(val, oldDepth, newDepth);
|
||||||
} else {
|
} else {
|
||||||
|
@ -722,10 +722,11 @@ public:
|
||||||
if (newDepth == 0) {
|
if (newDepth == 0) {
|
||||||
return 0xFF;
|
return 0xFF;
|
||||||
} else {
|
} else {
|
||||||
uint8_t bitsWasted = oldDepth - newDepth;
|
uint8_t bitsWasted = static_cast<uint8_t>(oldDepth - newDepth);
|
||||||
uint16_t v = static_cast<uint16_t>(val);
|
uint16_t v = static_cast<uint16_t>(val);
|
||||||
v = (v + (1 << (bitsWasted - 1))) >> bitsWasted;
|
v = static_cast<uint16_t>((v + (1 << (bitsWasted - 1))) >> bitsWasted);
|
||||||
v = ::std::min<uint16_t>(::std::max<uint16_t>(0, v), (1 << newDepth) - 1);
|
v = ::std::min<uint16_t>(::std::max<uint16_t>(0, v),
|
||||||
|
static_cast<uint16_t>((1 << newDepth) - 1));
|
||||||
return static_cast<uint8_t>(v);
|
return static_cast<uint8_t>(v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1191,18 +1192,18 @@ static uint32_t SelectPartition(int32_t seed, int32_t x, int32_t y, int32_t z,
|
||||||
uint8_t seed11 = static_cast<uint8_t>((rnum >> 26) & 0xF);
|
uint8_t seed11 = static_cast<uint8_t>((rnum >> 26) & 0xF);
|
||||||
uint8_t seed12 = static_cast<uint8_t>(((rnum >> 30) | (rnum << 2)) & 0xF);
|
uint8_t seed12 = static_cast<uint8_t>(((rnum >> 30) | (rnum << 2)) & 0xF);
|
||||||
|
|
||||||
seed1 *= seed1;
|
seed1 = static_cast<uint8_t>(seed1 * seed1);
|
||||||
seed2 *= seed2;
|
seed2 = static_cast<uint8_t>(seed2 * seed2);
|
||||||
seed3 *= seed3;
|
seed3 = static_cast<uint8_t>(seed3 * seed3);
|
||||||
seed4 *= seed4;
|
seed4 = static_cast<uint8_t>(seed4 * seed4);
|
||||||
seed5 *= seed5;
|
seed5 = static_cast<uint8_t>(seed5 * seed5);
|
||||||
seed6 *= seed6;
|
seed6 = static_cast<uint8_t>(seed6 * seed6);
|
||||||
seed7 *= seed7;
|
seed7 = static_cast<uint8_t>(seed7 * seed7);
|
||||||
seed8 *= seed8;
|
seed8 = static_cast<uint8_t>(seed8 * seed8);
|
||||||
seed9 *= seed9;
|
seed9 = static_cast<uint8_t>(seed9 * seed9);
|
||||||
seed10 *= seed10;
|
seed10 = static_cast<uint8_t>(seed10 * seed10);
|
||||||
seed11 *= seed11;
|
seed11 = static_cast<uint8_t>(seed11 * seed11);
|
||||||
seed12 *= seed12;
|
seed12 = static_cast<uint8_t>(seed12 * seed12);
|
||||||
|
|
||||||
int32_t sh1, sh2, sh3;
|
int32_t sh1, sh2, sh3;
|
||||||
if (seed & 1) {
|
if (seed & 1) {
|
||||||
|
@ -1214,18 +1215,18 @@ static uint32_t SelectPartition(int32_t seed, int32_t x, int32_t y, int32_t z,
|
||||||
}
|
}
|
||||||
sh3 = (seed & 0x10) ? sh1 : sh2;
|
sh3 = (seed & 0x10) ? sh1 : sh2;
|
||||||
|
|
||||||
seed1 >>= sh1;
|
seed1 = static_cast<uint8_t>(seed1 >> sh1);
|
||||||
seed2 >>= sh2;
|
seed2 = static_cast<uint8_t>(seed2 >> sh2);
|
||||||
seed3 >>= sh1;
|
seed3 = static_cast<uint8_t>(seed3 >> sh1);
|
||||||
seed4 >>= sh2;
|
seed4 = static_cast<uint8_t>(seed4 >> sh2);
|
||||||
seed5 >>= sh1;
|
seed5 = static_cast<uint8_t>(seed5 >> sh1);
|
||||||
seed6 >>= sh2;
|
seed6 = static_cast<uint8_t>(seed6 >> sh2);
|
||||||
seed7 >>= sh1;
|
seed7 = static_cast<uint8_t>(seed7 >> sh1);
|
||||||
seed8 >>= sh2;
|
seed8 = static_cast<uint8_t>(seed8 >> sh2);
|
||||||
seed9 >>= sh3;
|
seed9 = static_cast<uint8_t>(seed9 >> sh3);
|
||||||
seed10 >>= sh3;
|
seed10 = static_cast<uint8_t>(seed10 >> sh3);
|
||||||
seed11 >>= sh3;
|
seed11 = static_cast<uint8_t>(seed11 >> sh3);
|
||||||
seed12 >>= sh3;
|
seed12 = static_cast<uint8_t>(seed12 >> sh3);
|
||||||
|
|
||||||
int32_t a = seed1 * x + seed2 * y + seed11 * z + (rnum >> 14);
|
int32_t a = seed1 * x + seed2 * y + seed11 * z + (rnum >> 14);
|
||||||
int32_t b = seed3 * x + seed4 * y + seed12 * z + (rnum >> 10);
|
int32_t b = seed3 * x + seed4 * y + seed12 * z + (rnum >> 10);
|
||||||
|
@ -1558,7 +1559,9 @@ static void DecompressBlock(const uint8_t inBuf[16], const uint32_t blockWidth,
|
||||||
|
|
||||||
// Make sure that higher non-texel bits are set to zero
|
// Make sure that higher non-texel bits are set to zero
|
||||||
const uint32_t clearByteStart = (weightParams.GetPackedBitSize() >> 3) + 1;
|
const uint32_t clearByteStart = (weightParams.GetPackedBitSize() >> 3) + 1;
|
||||||
texelWeightData[clearByteStart - 1] &= (1 << (weightParams.GetPackedBitSize() % 8)) - 1;
|
texelWeightData[clearByteStart - 1] =
|
||||||
|
texelWeightData[clearByteStart - 1] &
|
||||||
|
static_cast<uint8_t>((1 << (weightParams.GetPackedBitSize() % 8)) - 1);
|
||||||
memset(texelWeightData + clearByteStart, 0, 16 - clearByteStart);
|
memset(texelWeightData + clearByteStart, 0, 16 - clearByteStart);
|
||||||
|
|
||||||
std::vector<IntegerEncodedValue> texelWeightValues;
|
std::vector<IntegerEncodedValue> texelWeightValues;
|
||||||
|
|
|
@ -342,13 +342,14 @@ struct TSCEntry {
|
||||||
float GetLodBias() const {
|
float GetLodBias() const {
|
||||||
// Sign extend the 13-bit value.
|
// Sign extend the 13-bit value.
|
||||||
constexpr u32 mask = 1U << (13 - 1);
|
constexpr u32 mask = 1U << (13 - 1);
|
||||||
return static_cast<s32>((mip_lod_bias ^ mask) - mask) / 256.0f;
|
return static_cast<float>(static_cast<s32>((mip_lod_bias ^ mask) - mask)) / 256.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::array<float, 4> GetBorderColor() const {
|
std::array<float, 4> GetBorderColor() const {
|
||||||
if (srgb_conversion) {
|
if (srgb_conversion) {
|
||||||
return {srgb_border_color_r / 255.0f, srgb_border_color_g / 255.0f,
|
return {static_cast<float>(srgb_border_color_r) / 255.0f,
|
||||||
srgb_border_color_b / 255.0f, border_color[3]};
|
static_cast<float>(srgb_border_color_g) / 255.0f,
|
||||||
|
static_cast<float>(srgb_border_color_b) / 255.0f, border_color[3]};
|
||||||
}
|
}
|
||||||
return border_color;
|
return border_color;
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ std::unique_ptr<Tegra::GPU> CreateGPU(Core::System& system) {
|
||||||
|
|
||||||
u16 GetResolutionScaleFactor(const RendererBase& renderer) {
|
u16 GetResolutionScaleFactor(const RendererBase& renderer) {
|
||||||
return static_cast<u16>(
|
return static_cast<u16>(
|
||||||
Settings::values.resolution_factor
|
Settings::values.resolution_factor != 0
|
||||||
? Settings::values.resolution_factor
|
? Settings::values.resolution_factor
|
||||||
: renderer.GetRenderWindow().GetFramebufferLayout().GetScalingRatio());
|
: renderer.GetRenderWindow().GetFramebufferLayout().GetScalingRatio());
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue