diff --git a/src/util/gpu_device.cpp b/src/util/gpu_device.cpp index 303f10c51..2627b3ea9 100644 --- a/src/util/gpu_device.cpp +++ b/src/util/gpu_device.cpp @@ -236,6 +236,9 @@ size_t GPUFramebufferManagerBase::KeyHash::operator()(const Key& key) const GPUSwapChain::GPUSwapChain(const WindowInfo& wi, GPUVSyncMode vsync_mode) : m_window_info(wi), m_vsync_mode(vsync_mode) { + // Needed for the GetSizeVec() function to work. + static_assert(OFFSETOF(GPUSwapChain, m_window_info.surface_height) == + OFFSETOF(GPUSwapChain, m_window_info.surface_width) + sizeof(u16)); } GPUSwapChain::~GPUSwapChain() = default; diff --git a/src/util/gpu_device.h b/src/util/gpu_device.h index 2aa802d6e..10565e53a 100644 --- a/src/util/gpu_device.h +++ b/src/util/gpu_device.h @@ -471,10 +471,7 @@ public: ALWAYS_INLINE void SetRefreshRate(float refresh_rate) { m_window_info.surface_refresh_rate = refresh_rate; } ALWAYS_INLINE WindowInfoPrerotation GetPreRotation() const { return m_window_info.surface_prerotation; } ALWAYS_INLINE GPUTextureFormat GetFormat() const { return m_window_info.surface_format; } - ALWAYS_INLINE GSVector2i GetSizeVec() const - { - return GSVector2i(m_window_info.surface_width, m_window_info.surface_height); - } + ALWAYS_INLINE GSVector2i GetSizeVec() const { return GSVector2i::load32(&m_window_info.surface_width).u16to32(); } ALWAYS_INLINE GSVector2i GetPostRotatedSizeVec() const { return GSVector2i(m_window_info.GetPostRotatedWidth(), m_window_info.GetPostRotatedHeight()); diff --git a/src/util/gpu_texture.cpp b/src/util/gpu_texture.cpp index 63a4ee99c..7d9758f90 100644 --- a/src/util/gpu_texture.cpp +++ b/src/util/gpu_texture.cpp @@ -16,6 +16,8 @@ GPUTexture::GPUTexture(u16 width, u16 height, u8 layers, u8 levels, u8 samples, : m_width(width), m_height(height), m_layers(layers), m_levels(levels), m_samples(samples), m_type(type), m_format(format), m_flags(flags) { + // Needed for the GPUTexture::GetSizeVec() and GPUTexture::GetRect() functions to work correctly. + static_assert(OFFSETOF(GPUTexture, m_height) == OFFSETOF(GPUTexture, m_width) + sizeof(u16)); GPUDevice::s_total_vram_usage += GetVRAMUsage(); } diff --git a/src/util/gpu_texture.h b/src/util/gpu_texture.h index 4bf688bfe..e0ae871eb 100644 --- a/src/util/gpu_texture.h +++ b/src/util/gpu_texture.h @@ -92,11 +92,8 @@ public: ALWAYS_INLINE GPUTextureFormat GetFormat() const { return m_format; } ALWAYS_INLINE Flags GetFlags() const { return m_flags; } ALWAYS_INLINE bool HasFlag(Flags flag) const { return ((static_cast(m_flags) & static_cast(flag)) != 0); } - ALWAYS_INLINE GSVector2i GetSizeVec() const { return GSVector2i(m_width, m_height); } - ALWAYS_INLINE GSVector4i GetRect() const - { - return GSVector4i(0, 0, static_cast(m_width), static_cast(m_height)); - } + ALWAYS_INLINE GSVector2i GetSizeVec() const { return GSVector2i::load32(&m_width).u16to32(); } + ALWAYS_INLINE GSVector4i GetRect() const { return GSVector4i::loadh(GetSizeVec()); } ALWAYS_INLINE bool IsTextureArray() const { return m_layers > 1; } ALWAYS_INLINE bool IsMultisampled() const { return m_samples > 1; }