mirror of https://github.com/PCSX2/pcsx2.git
gsdx hw: allow to create sparse texture at device level
Obviously texture allocation should be updated too
This commit is contained in:
parent
3408d1a873
commit
643ed528c2
|
@ -201,6 +201,16 @@ void GSDevice::PurgePool()
|
|||
}
|
||||
}
|
||||
|
||||
GSTexture* GSDevice::CreateSparseRenderTarget(int w, int h, int format)
|
||||
{
|
||||
return FetchSurface(HasColorSparse() ? GSTexture::SparseRenderTarget : GSTexture::RenderTarget, w, h, format);
|
||||
}
|
||||
|
||||
GSTexture* GSDevice::CreateSparseDepthStencil(int w, int h, int format)
|
||||
{
|
||||
return FetchSurface(HasDepthSparse() ? GSTexture::SparseDepthStencil : GSTexture::DepthStencil, w, h, format);
|
||||
}
|
||||
|
||||
GSTexture* GSDevice::CreateRenderTarget(int w, int h, int format)
|
||||
{
|
||||
return FetchSurface(GSTexture::RenderTarget, w, h, format);
|
||||
|
|
|
@ -167,11 +167,16 @@ public:
|
|||
virtual void DrawIndexedPrimitive(int offset, int count) {}
|
||||
virtual void EndScene();
|
||||
|
||||
virtual bool HasDepthSparse() { return false; }
|
||||
virtual bool HasColorSparse() { return false; }
|
||||
|
||||
virtual void ClearRenderTarget(GSTexture* t, const GSVector4& c) {}
|
||||
virtual void ClearRenderTarget(GSTexture* t, uint32 c) {}
|
||||
virtual void ClearDepth(GSTexture* t) {}
|
||||
virtual void ClearStencil(GSTexture* t, uint8 c) {}
|
||||
|
||||
GSTexture* CreateSparseRenderTarget(int w, int h, int format = 0);
|
||||
GSTexture* CreateSparseDepthStencil(int w, int h, int format = 0);
|
||||
GSTexture* CreateRenderTarget(int w, int h, int format = 0);
|
||||
GSTexture* CreateDepthStencil(int w, int h, int format = 0);
|
||||
GSTexture* CreateTexture(int w, int h, int format = 0);
|
||||
|
|
|
@ -34,7 +34,7 @@ protected:
|
|||
public:
|
||||
struct GSMap {uint8* bits; int pitch;};
|
||||
|
||||
enum {RenderTarget = 1, DepthStencil, Texture, Offscreen, Backbuffer};
|
||||
enum {RenderTarget = 1, DepthStencil, Texture, Offscreen, Backbuffer, SparseRenderTarget, SparseDepthStencil};
|
||||
|
||||
public:
|
||||
GSTexture();
|
||||
|
|
|
@ -735,7 +735,7 @@ GSTexture* GSDevice11::CreateSurface(int type, int w, int h, int format)
|
|||
GSTexture* GSDevice11::FetchSurface(int type, int w, int h, int format)
|
||||
{
|
||||
if (format == 0)
|
||||
format = (type == GSTexture::DepthStencil) ? DXGI_FORMAT_R32G8X24_TYPELESS : DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
format = (type == GSTexture::DepthStencil || type == GSTexture::SparseDepthStencil) ? DXGI_FORMAT_R32G8X24_TYPELESS : DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
|
||||
return __super::FetchSurface(type, w, h, format);
|
||||
}
|
||||
|
|
|
@ -258,7 +258,7 @@ GSTexture* GSDeviceOGL::CreateSurface(int type, int w, int h, int fmt)
|
|||
GSTexture* GSDeviceOGL::FetchSurface(int type, int w, int h, int format)
|
||||
{
|
||||
if (format == 0)
|
||||
format = (type == GSTexture::DepthStencil) ? GL_DEPTH32F_STENCIL8 : GL_RGBA8;
|
||||
format = (type == GSTexture::DepthStencil || type == GSTexture::SparseDepthStencil) ? GL_DEPTH32F_STENCIL8 : GL_RGBA8;
|
||||
|
||||
GSTexture* t = GSDevice::FetchSurface(type, w, h, format);
|
||||
|
||||
|
|
Loading…
Reference in New Issue