GPUTexture: Don't assemble vector in GetSizeVec()

Use a load/extend instead. Turns into movd+pmovzxwd.
pull/3704/head
Stenzek 7 months ago
parent c5fdea1eed
commit 401a0ba4c1
No known key found for this signature in database

@ -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;

@ -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());

@ -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();
}

@ -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<u8>(m_flags) & static_cast<u8>(flag)) != 0); }
ALWAYS_INLINE GSVector2i GetSizeVec() const { return GSVector2i(m_width, m_height); }
ALWAYS_INLINE GSVector4i GetRect() const
{
return GSVector4i(0, 0, static_cast<s32>(m_width), static_cast<s32>(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; }

Loading…
Cancel
Save