From ca7e5be6b49f30f4561620202c9fedbe842a4c2c Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Sun, 16 Apr 2023 21:49:05 +0200 Subject: [PATCH] Remove virtual inheritance --- src/common/2d/v_2ddrawer.cpp | 7 +++--- src/common/2d/v_2ddrawer.h | 6 ++--- .../rendering/hwrenderer/data/buffers.h | 19 --------------- .../hwrenderer/data/flatvertices.cpp | 13 ++++------- .../rendering/hwrenderer/data/flatvertices.h | 8 +++---- .../rendering/hwrenderer/data/hw_bonebuffer.h | 6 ++--- .../hwrenderer/data/hw_lightbuffer.h | 6 ++--- .../hwrenderer/data/hw_modelvertexbuffer.cpp | 10 ++++---- .../hwrenderer/data/hw_modelvertexbuffer.h | 8 +++---- .../hwrenderer/data/hw_renderstate.h | 11 ++++----- .../rendering/hwrenderer/data/hw_shadowmap.h | 8 +++---- .../rendering/hwrenderer/data/hw_skydome.cpp | 3 +-- .../rendering/hwrenderer/data/hw_skydome.h | 6 ++--- .../hwrenderer/data/hw_viewpointbuffer.h | 4 ++-- src/common/rendering/v_video.h | 21 ++++++++--------- .../rendering/vulkan/buffers/vk_buffer.cpp | 19 +++++++-------- .../rendering/vulkan/buffers/vk_buffer.h | 23 +++++++++---------- .../rendering/vulkan/buffers/vk_hwbuffer.cpp | 7 ------ .../rendering/vulkan/buffers/vk_hwbuffer.h | 17 ++++---------- .../rendering/vulkan/vk_renderdevice.cpp | 18 +++++++-------- src/common/rendering/vulkan/vk_renderdevice.h | 17 +++++++------- .../rendering/vulkan/vk_renderstate.cpp | 2 +- src/common/rendering/vulkan/vk_renderstate.h | 4 ++-- 23 files changed, 102 insertions(+), 141 deletions(-) diff --git a/src/common/2d/v_2ddrawer.cpp b/src/common/2d/v_2ddrawer.cpp index b700ee7bcb..4397e0f7ae 100644 --- a/src/common/2d/v_2ddrawer.cpp +++ b/src/common/2d/v_2ddrawer.cpp @@ -1216,15 +1216,14 @@ void F2DDrawer::OnFrameDone() F2DVertexBuffer::F2DVertexBuffer() { - mVertexBuffer = screen->CreateVertexBuffer(); - mIndexBuffer = screen->CreateIndexBuffer(); - static const FVertexBufferAttribute format[] = { { 0, VATTR_VERTEX, VFmt_Float3, (int)myoffsetof(F2DDrawer::TwoDVertex, x) }, { 0, VATTR_TEXCOORD, VFmt_Float2, (int)myoffsetof(F2DDrawer::TwoDVertex, u) }, { 0, VATTR_COLOR, VFmt_Byte4, (int)myoffsetof(F2DDrawer::TwoDVertex, color0) } }; - mVertexBuffer->SetFormat(1, 3, sizeof(F2DDrawer::TwoDVertex), format); + + mVertexBuffer = screen->CreateVertexBuffer(1, 3, sizeof(F2DDrawer::TwoDVertex), format); + mIndexBuffer = screen->CreateIndexBuffer(); } //========================================================================== diff --git a/src/common/2d/v_2ddrawer.h b/src/common/2d/v_2ddrawer.h index fc2970b154..5a6111225d 100644 --- a/src/common/2d/v_2ddrawer.h +++ b/src/common/2d/v_2ddrawer.h @@ -331,8 +331,8 @@ public: class F2DVertexBuffer { - IVertexBuffer *mVertexBuffer; - IIndexBuffer *mIndexBuffer; + IBuffer* mVertexBuffer; + IBuffer* mIndexBuffer; public: @@ -351,7 +351,7 @@ public: mIndexBuffer->SetData(indexcount * sizeof(unsigned int), indices, BufferUsageType::Stream); } - std::pair GetBufferObjects() const + std::pair GetBufferObjects() const { return std::make_pair(mVertexBuffer, mIndexBuffer); } diff --git a/src/common/rendering/hwrenderer/data/buffers.h b/src/common/rendering/hwrenderer/data/buffers.h index ea2a015213..1f53a251bd 100644 --- a/src/common/rendering/hwrenderer/data/buffers.h +++ b/src/common/rendering/hwrenderer/data/buffers.h @@ -81,22 +81,3 @@ public: void *Memory() { return map; } size_t Size() { return buffersize; } }; - -class IVertexBuffer : virtual public IBuffer -{ -public: - virtual void SetFormat(int numBindingPoints, int numAttributes, size_t stride, const FVertexBufferAttribute *attrs) = 0; -}; - -// This merely exists to have a dedicated type for index buffers to inherit from. -class IIndexBuffer : virtual public IBuffer -{ - // Element size is fixed to 4, thanks to OpenGL requiring this info to be coded into the glDrawElements call. - // This mostly prohibits a more flexible buffer setup but GZDoom doesn't use any other format anyway. - // Ob Vulkam, element size is a buffer property and of no concern to the drawing functions (as it should be.) -}; - -class IDataBuffer : virtual public IBuffer -{ - // Can be either uniform or shader storage buffer, depending on its needs. -}; diff --git a/src/common/rendering/hwrenderer/data/flatvertices.cpp b/src/common/rendering/hwrenderer/data/flatvertices.cpp index 714583c834..0066e3d4b0 100644 --- a/src/common/rendering/hwrenderer/data/flatvertices.cpp +++ b/src/common/rendering/hwrenderer/data/flatvertices.cpp @@ -85,18 +85,15 @@ FFlatVertexBuffer::FFlatVertexBuffer(DFrameBuffer* fb, int width, int height, in for (int n = 0; n < mPipelineNbr; n++) { - mVertexBufferPipeline[n] = fb->CreateVertexBuffer(); - - unsigned int bytesize = BUFFER_SIZE * sizeof(FFlatVertex); - mVertexBufferPipeline[n]->SetData(bytesize, nullptr, BufferUsageType::Persistent); - - static const FVertexBufferAttribute format[] = { + static const FVertexBufferAttribute format[] = + { { 0, VATTR_VERTEX, VFmt_Float3, (int)myoffsetof(FFlatVertex, x) }, { 0, VATTR_TEXCOORD, VFmt_Float2, (int)myoffsetof(FFlatVertex, u) }, { 0, VATTR_LIGHTMAP, VFmt_Float3, (int)myoffsetof(FFlatVertex, lu) }, }; - mVertexBufferPipeline[n]->SetFormat(1, 3, sizeof(FFlatVertex), format); + mVertexBufferPipeline[n] = fb->CreateVertexBuffer(1, 3, sizeof(FFlatVertex), format); + mVertexBufferPipeline[n]->SetData(BUFFER_SIZE * sizeof(FFlatVertex), nullptr, BufferUsageType::Persistent); } mVertexBuffer = mVertexBufferPipeline[mPipelinePos]; @@ -165,7 +162,7 @@ std::pair FFlatVertexBuffer::AllocVertices(unsigned void FFlatVertexBuffer::Copy(int start, int count) { - IVertexBuffer* old = mVertexBuffer; + IBuffer* old = mVertexBuffer; for (int n = 0; n < mPipelineNbr; n++) { diff --git a/src/common/rendering/hwrenderer/data/flatvertices.h b/src/common/rendering/hwrenderer/data/flatvertices.h index 5af5ddd612..2642715c8c 100644 --- a/src/common/rendering/hwrenderer/data/flatvertices.h +++ b/src/common/rendering/hwrenderer/data/flatvertices.h @@ -65,9 +65,9 @@ public: int mPipelineNbr; int mPipelinePos = 0; - IVertexBuffer* mVertexBuffer; - IVertexBuffer *mVertexBufferPipeline[HW_MAX_PIPELINE_BUFFERS]; - IIndexBuffer *mIndexBuffer; + IBuffer* mVertexBuffer; + IBuffer* mVertexBufferPipeline[HW_MAX_PIPELINE_BUFFERS]; + IBuffer* mIndexBuffer; @@ -96,7 +96,7 @@ public: ~FFlatVertexBuffer(); void OutputResized(int width, int height); - std::pair GetBufferObjects() const + std::pair GetBufferObjects() const { return std::make_pair(mVertexBuffer, mIndexBuffer); } diff --git a/src/common/rendering/hwrenderer/data/hw_bonebuffer.h b/src/common/rendering/hwrenderer/data/hw_bonebuffer.h index e24a1a17c0..367529416a 100644 --- a/src/common/rendering/hwrenderer/data/hw_bonebuffer.h +++ b/src/common/rendering/hwrenderer/data/hw_bonebuffer.h @@ -12,8 +12,8 @@ class FRenderState; class BoneBuffer { DFrameBuffer* fb = nullptr; - IDataBuffer *mBuffer; - IDataBuffer* mBufferPipeline[HW_MAX_PIPELINE_BUFFERS]; + IBuffer *mBuffer; + IBuffer* mBufferPipeline[HW_MAX_PIPELINE_BUFFERS]; int mPipelineNbr; int mPipelinePos = 0; @@ -41,7 +41,7 @@ public: int GetCurrentIndex() { return mIndex; }; // OpenGL needs the buffer to mess around with the binding. - IDataBuffer* GetBuffer() const + IBuffer* GetBuffer() const { return mBuffer; } diff --git a/src/common/rendering/hwrenderer/data/hw_lightbuffer.h b/src/common/rendering/hwrenderer/data/hw_lightbuffer.h index 27d3c74b98..b68c32e84a 100644 --- a/src/common/rendering/hwrenderer/data/hw_lightbuffer.h +++ b/src/common/rendering/hwrenderer/data/hw_lightbuffer.h @@ -13,8 +13,8 @@ class FRenderState; class FLightBuffer { DFrameBuffer* fb = nullptr; - IDataBuffer *mBuffer; - IDataBuffer* mBufferPipeline[HW_MAX_PIPELINE_BUFFERS]; + IBuffer* mBuffer; + IBuffer* mBufferPipeline[HW_MAX_PIPELINE_BUFFERS]; int mPipelineNbr; int mPipelinePos = 0; @@ -41,7 +41,7 @@ public: int GetBinding(unsigned int index, size_t* pOffset, size_t* pSize); // OpenGL needs the buffer to mess around with the binding. - IDataBuffer* GetBuffer() const + IBuffer* GetBuffer() const { return mBuffer; } diff --git a/src/common/rendering/hwrenderer/data/hw_modelvertexbuffer.cpp b/src/common/rendering/hwrenderer/data/hw_modelvertexbuffer.cpp index 9dff499f94..c6e0d97830 100644 --- a/src/common/rendering/hwrenderer/data/hw_modelvertexbuffer.cpp +++ b/src/common/rendering/hwrenderer/data/hw_modelvertexbuffer.cpp @@ -39,10 +39,8 @@ FModelVertexBuffer::FModelVertexBuffer(bool needindex, bool singleframe) { - mVertexBuffer = screen->CreateVertexBuffer(); - mIndexBuffer = needindex ? screen->CreateIndexBuffer() : nullptr; - - static const FVertexBufferAttribute format[] = { + static const FVertexBufferAttribute format[] = + { { 0, VATTR_VERTEX, VFmt_Float3, (int)myoffsetof(FModelVertex, x) }, { 0, VATTR_TEXCOORD, VFmt_Float2, (int)myoffsetof(FModelVertex, u) }, { 0, VATTR_NORMAL, VFmt_Packed_A2R10G10B10, (int)myoffsetof(FModelVertex, packedNormal) }, @@ -52,7 +50,9 @@ FModelVertexBuffer::FModelVertexBuffer(bool needindex, bool singleframe) { 1, VATTR_VERTEX2, VFmt_Float3, (int)myoffsetof(FModelVertex, x) }, { 1, VATTR_NORMAL2, VFmt_Packed_A2R10G10B10, (int)myoffsetof(FModelVertex, packedNormal) } }; - mVertexBuffer->SetFormat(2, 8, sizeof(FModelVertex), format); + + mVertexBuffer = screen->CreateVertexBuffer(2, 8, sizeof(FModelVertex), format); + mIndexBuffer = needindex ? screen->CreateIndexBuffer() : nullptr; } //=========================================================================== diff --git a/src/common/rendering/hwrenderer/data/hw_modelvertexbuffer.h b/src/common/rendering/hwrenderer/data/hw_modelvertexbuffer.h index 4907637d46..6c32e1dba5 100644 --- a/src/common/rendering/hwrenderer/data/hw_modelvertexbuffer.h +++ b/src/common/rendering/hwrenderer/data/hw_modelvertexbuffer.h @@ -7,8 +7,8 @@ class FModelRenderer; class FModelVertexBuffer : public IModelVertexBuffer { - IVertexBuffer *mVertexBuffer; - IIndexBuffer *mIndexBuffer; + IBuffer* mVertexBuffer; + IBuffer* mIndexBuffer; public: @@ -21,6 +21,6 @@ public: unsigned int *LockIndexBuffer(unsigned int size) override; void UnlockIndexBuffer() override; - IVertexBuffer* vertexBuffer() const { return mVertexBuffer; } - IIndexBuffer* indexBuffer() const { return mIndexBuffer; } + IBuffer* vertexBuffer() const { return mVertexBuffer; } + IBuffer* indexBuffer() const { return mIndexBuffer; } }; diff --git a/src/common/rendering/hwrenderer/data/hw_renderstate.h b/src/common/rendering/hwrenderer/data/hw_renderstate.h index 9fcafbdfb8..12c4bc6ba6 100644 --- a/src/common/rendering/hwrenderer/data/hw_renderstate.h +++ b/src/common/rendering/hwrenderer/data/hw_renderstate.h @@ -8,8 +8,7 @@ #include "i_interface.h" struct FColormap; -class IVertexBuffer; -class IIndexBuffer; +class IBuffer; enum EClearTarget { @@ -240,9 +239,9 @@ protected: FMaterialState mMaterial; FDepthBiasState mBias; - IVertexBuffer *mVertexBuffer; + IBuffer* mVertexBuffer; int mVertexOffsets[2]; // one per binding point - IIndexBuffer *mIndexBuffer; + IBuffer* mIndexBuffer; EPassType mPassType = NORMAL_PASS; @@ -657,7 +656,7 @@ public: mClipSplit[1] = 1000000.f; } - void SetVertexBuffer(IVertexBuffer *vb, int offset0, int offset1) + void SetVertexBuffer(IBuffer* vb, int offset0, int offset1) { assert(vb); mVertexBuffer = vb; @@ -665,7 +664,7 @@ public: mVertexOffsets[1] = offset1; } - void SetIndexBuffer(IIndexBuffer *ib) + void SetIndexBuffer(IBuffer* ib) { mIndexBuffer = ib; } diff --git a/src/common/rendering/hwrenderer/data/hw_shadowmap.h b/src/common/rendering/hwrenderer/data/hw_shadowmap.h index f6d4203b32..1900b40942 100644 --- a/src/common/rendering/hwrenderer/data/hw_shadowmap.h +++ b/src/common/rendering/hwrenderer/data/hw_shadowmap.h @@ -6,7 +6,7 @@ #include #include -class IDataBuffer; +class IBuffer; class DFrameBuffer; class ShadowMap @@ -84,11 +84,11 @@ protected: // OpenGL storage buffer with the list of lights in the shadow map texture // These buffers need to be accessed by the OpenGL backend directly so that they can be bound. public: - IDataBuffer *mLightList = nullptr; + IBuffer* mLightList = nullptr; // OpenGL storage buffers for the AABB tree - IDataBuffer *mNodesBuffer = nullptr; - IDataBuffer *mLinesBuffer = nullptr; + IBuffer* mNodesBuffer = nullptr; + IBuffer* mLinesBuffer = nullptr; std::function CollectLights = nullptr; diff --git a/src/common/rendering/hwrenderer/data/hw_skydome.cpp b/src/common/rendering/hwrenderer/data/hw_skydome.cpp index 936aeb9dd7..b55f9d1428 100644 --- a/src/common/rendering/hwrenderer/data/hw_skydome.cpp +++ b/src/common/rendering/hwrenderer/data/hw_skydome.cpp @@ -122,7 +122,6 @@ std::pair& R_GetSkyCapColor(FGameTexture* tex) FSkyVertexBuffer::FSkyVertexBuffer(DFrameBuffer* fb) : fb(fb) { CreateDome(); - mVertexBuffer = fb->CreateVertexBuffer(); static const FVertexBufferAttribute format[] = { { 0, VATTR_VERTEX, VFmt_Float3, (int)myoffsetof(FSkyVertex, x) }, @@ -130,7 +129,7 @@ FSkyVertexBuffer::FSkyVertexBuffer(DFrameBuffer* fb) : fb(fb) { 0, VATTR_COLOR, VFmt_Byte4, (int)myoffsetof(FSkyVertex, color) }, { 0, VATTR_LIGHTMAP, VFmt_Float3, (int)myoffsetof(FSkyVertex, lu) }, }; - mVertexBuffer->SetFormat(1, 4, sizeof(FSkyVertex), format); + mVertexBuffer = fb->CreateVertexBuffer(1, 4, sizeof(FSkyVertex), format); mVertexBuffer->SetData(mVertices.Size() * sizeof(FSkyVertex), &mVertices[0], BufferUsageType::Static); } diff --git a/src/common/rendering/hwrenderer/data/hw_skydome.h b/src/common/rendering/hwrenderer/data/hw_skydome.h index 1a1661ed5d..d10ef8e558 100644 --- a/src/common/rendering/hwrenderer/data/hw_skydome.h +++ b/src/common/rendering/hwrenderer/data/hw_skydome.h @@ -8,7 +8,7 @@ class DFrameBuffer; class FGameTexture; class FRenderState; -class IVertexBuffer; +class IBuffer; struct HWSkyPortal; struct HWDrawInfo; @@ -63,7 +63,7 @@ public: SKYMODE_FOGLAYER = 2 }; - IVertexBuffer *mVertexBuffer; + IBuffer* mVertexBuffer; TArray mVertices; TArray mPrimStartDoom; @@ -86,7 +86,7 @@ public: FSkyVertexBuffer(DFrameBuffer* fb); ~FSkyVertexBuffer(); void SetupMatrices(FGameTexture *tex, float x_offset, float y_offset, bool mirror, int mode, VSMatrix &modelmatrix, VSMatrix &textureMatrix, bool tiled, float xscale = 0, float vertscale = 0); - std::pair GetBufferObjects() const + std::pair GetBufferObjects() const { return std::make_pair(mVertexBuffer, nullptr); } diff --git a/src/common/rendering/hwrenderer/data/hw_viewpointbuffer.h b/src/common/rendering/hwrenderer/data/hw_viewpointbuffer.h index 84dbb37a35..a5b8d8af85 100644 --- a/src/common/rendering/hwrenderer/data/hw_viewpointbuffer.h +++ b/src/common/rendering/hwrenderer/data/hw_viewpointbuffer.h @@ -9,8 +9,8 @@ class FRenderState; class HWViewpointBuffer { DFrameBuffer* fb = nullptr; - IDataBuffer *mBuffer; - IDataBuffer* mBufferPipeline[HW_MAX_PIPELINE_BUFFERS]; + IBuffer* mBuffer; + IBuffer* mBufferPipeline[HW_MAX_PIPELINE_BUFFERS]; int mPipelineNbr; int mPipelinePos = 0; diff --git a/src/common/rendering/v_video.h b/src/common/rendering/v_video.h index 1af6c25111..88fcad9925 100644 --- a/src/common/rendering/v_video.h +++ b/src/common/rendering/v_video.h @@ -50,9 +50,7 @@ struct FPortalSceneState; class FSkyVertexBuffer; -class IIndexBuffer; -class IVertexBuffer; -class IDataBuffer; +class IBuffer; class FFlatVertexBuffer; class HWViewpointBuffer; class FLightBuffer; @@ -94,6 +92,7 @@ struct FColormap; enum FTextureFormat : uint32_t; class FModelRenderer; struct SamplerUniform; +struct FVertexBufferAttribute; // // VIDEO @@ -236,17 +235,17 @@ public: virtual void InitLightmap(int LMTextureSize, int LMTextureCount, TArray& LMTextureData) {} // Interface to hardware rendering resources - virtual IVertexBuffer* CreateVertexBuffer() { return nullptr; } - virtual IIndexBuffer* CreateIndexBuffer() { return nullptr; } + virtual IBuffer* CreateVertexBuffer(int numBindingPoints, int numAttributes, size_t stride, const FVertexBufferAttribute* attrs) { return nullptr; } + virtual IBuffer* CreateIndexBuffer() { return nullptr; } bool BuffersArePersistent() { return !!(hwcaps & RFL_BUFFER_STORAGE); } // To do: these buffers shouldn't be created by the hwrenderer layer - it will be simpler if the backend manages them completely - virtual IDataBuffer* CreateLightBuffer() { return nullptr; } - virtual IDataBuffer* CreateBoneBuffer() { return nullptr; } - virtual IDataBuffer* CreateViewpointBuffer() { return nullptr; } - virtual IDataBuffer* CreateShadowmapNodesBuffer() { return nullptr; } - virtual IDataBuffer* CreateShadowmapLinesBuffer() { return nullptr; } - virtual IDataBuffer* CreateShadowmapLightsBuffer() { return nullptr; } + virtual IBuffer* CreateLightBuffer() { return nullptr; } + virtual IBuffer* CreateBoneBuffer() { return nullptr; } + virtual IBuffer* CreateViewpointBuffer() { return nullptr; } + virtual IBuffer* CreateShadowmapNodesBuffer() { return nullptr; } + virtual IBuffer* CreateShadowmapLinesBuffer() { return nullptr; } + virtual IBuffer* CreateShadowmapLightsBuffer() { return nullptr; } // This is overridable in case Vulkan does it differently. virtual bool RenderTextureIsFlipped() const diff --git a/src/common/rendering/vulkan/buffers/vk_buffer.cpp b/src/common/rendering/vulkan/buffers/vk_buffer.cpp index 02c89cd4bf..c84208124d 100644 --- a/src/common/rendering/vulkan/buffers/vk_buffer.cpp +++ b/src/common/rendering/vulkan/buffers/vk_buffer.cpp @@ -24,6 +24,7 @@ #include "vk_hwbuffer.h" #include "vk_streambuffer.h" #include "vulkan/vk_renderdevice.h" +#include "vulkan/pipelines/vk_renderpass.h" VkBufferManager::VkBufferManager(VulkanRenderDevice* fb) : fb(fb) { @@ -64,47 +65,47 @@ void VkBufferManager::RemoveBuffer(VkHardwareBuffer* buffer) } } -IVertexBuffer* VkBufferManager::CreateVertexBuffer() +IBuffer* VkBufferManager::CreateVertexBuffer(int numBindingPoints, int numAttributes, size_t stride, const FVertexBufferAttribute* attrs) { - return new VkHardwareVertexBuffer(fb); + return new VkHardwareVertexBuffer(fb, fb->GetRenderPassManager()->GetVertexFormat(numBindingPoints, numAttributes, stride, attrs)); } -IIndexBuffer* VkBufferManager::CreateIndexBuffer() +IBuffer* VkBufferManager::CreateIndexBuffer() { return new VkHardwareIndexBuffer(fb); } -IDataBuffer* VkBufferManager::CreateLightBuffer() +IBuffer* VkBufferManager::CreateLightBuffer() { LightBufferSSO = new VkHardwareDataBuffer(fb, true, false); return LightBufferSSO; } -IDataBuffer* VkBufferManager::CreateBoneBuffer() +IBuffer* VkBufferManager::CreateBoneBuffer() { BoneBufferSSO = new VkHardwareDataBuffer(fb, true, false); return BoneBufferSSO; } -IDataBuffer* VkBufferManager::CreateViewpointBuffer() +IBuffer* VkBufferManager::CreateViewpointBuffer() { ViewpointUBO = new VkHardwareDataBuffer(fb, false, true); return ViewpointUBO; } -IDataBuffer* VkBufferManager::CreateShadowmapNodesBuffer() +IBuffer* VkBufferManager::CreateShadowmapNodesBuffer() { LightNodes = new VkHardwareDataBuffer(fb, true, false); return LightNodes; } -IDataBuffer* VkBufferManager::CreateShadowmapLinesBuffer() +IBuffer* VkBufferManager::CreateShadowmapLinesBuffer() { LightLines = new VkHardwareDataBuffer(fb, true, false); return LightLines; } -IDataBuffer* VkBufferManager::CreateShadowmapLightsBuffer() +IBuffer* VkBufferManager::CreateShadowmapLightsBuffer() { LightList = new VkHardwareDataBuffer(fb, true, false); return LightList; diff --git a/src/common/rendering/vulkan/buffers/vk_buffer.h b/src/common/rendering/vulkan/buffers/vk_buffer.h index c1c6747218..8deea10447 100644 --- a/src/common/rendering/vulkan/buffers/vk_buffer.h +++ b/src/common/rendering/vulkan/buffers/vk_buffer.h @@ -8,9 +8,8 @@ class VulkanRenderDevice; class VkHardwareBuffer; class VkHardwareDataBuffer; class VkStreamBuffer; -class IIndexBuffer; -class IVertexBuffer; -class IDataBuffer; +class IBuffer; +struct FVertexBufferAttribute; class VkBufferManager { @@ -21,15 +20,15 @@ public: void Init(); void Deinit(); - IVertexBuffer* CreateVertexBuffer(); - IIndexBuffer* CreateIndexBuffer(); + IBuffer* CreateVertexBuffer(int numBindingPoints, int numAttributes, size_t stride, const FVertexBufferAttribute* attrs); + IBuffer* CreateIndexBuffer(); - IDataBuffer* CreateLightBuffer(); - IDataBuffer* CreateBoneBuffer(); - IDataBuffer* CreateViewpointBuffer(); - IDataBuffer* CreateShadowmapNodesBuffer(); - IDataBuffer* CreateShadowmapLinesBuffer(); - IDataBuffer* CreateShadowmapLightsBuffer(); + IBuffer* CreateLightBuffer(); + IBuffer* CreateBoneBuffer(); + IBuffer* CreateViewpointBuffer(); + IBuffer* CreateShadowmapNodesBuffer(); + IBuffer* CreateShadowmapLinesBuffer(); + IBuffer* CreateShadowmapLightsBuffer(); void AddBuffer(VkHardwareBuffer* buffer); void RemoveBuffer(VkHardwareBuffer* buffer); @@ -44,7 +43,7 @@ public: std::unique_ptr MatrixBuffer; std::unique_ptr StreamBuffer; - std::unique_ptr FanToTrisIndexBuffer; + std::unique_ptr FanToTrisIndexBuffer; private: void CreateFanToTrisIndexBuffer(); diff --git a/src/common/rendering/vulkan/buffers/vk_hwbuffer.cpp b/src/common/rendering/vulkan/buffers/vk_hwbuffer.cpp index 0e607953d9..d3bf75cba6 100644 --- a/src/common/rendering/vulkan/buffers/vk_hwbuffer.cpp +++ b/src/common/rendering/vulkan/buffers/vk_hwbuffer.cpp @@ -236,10 +236,3 @@ void VkHardwareBuffer::Unlock() map = nullptr; } } - -///////////////////////////////////////////////////////////////////////////// - -void VkHardwareVertexBuffer::SetFormat(int numBindingPoints, int numAttributes, size_t stride, const FVertexBufferAttribute *attrs) -{ - VertexFormat = fb->GetRenderPassManager()->GetVertexFormat(numBindingPoints, numAttributes, stride, attrs); -} diff --git a/src/common/rendering/vulkan/buffers/vk_hwbuffer.h b/src/common/rendering/vulkan/buffers/vk_hwbuffer.h index 84b96bf915..4927d9c5a6 100644 --- a/src/common/rendering/vulkan/buffers/vk_hwbuffer.h +++ b/src/common/rendering/vulkan/buffers/vk_hwbuffer.h @@ -5,15 +5,9 @@ #include "tarray.h" #include -#ifdef _MSC_VER -// silence bogus warning C4250: 'VkHardwareVertexBuffer': inherits 'VkHardwareBuffer::VkHardwareBuffer::SetData' via dominance -// According to internet infos, the warning is erroneously emitted in this case. -#pragma warning(disable:4250) -#endif - class VulkanRenderDevice; -class VkHardwareBuffer : virtual public IBuffer +class VkHardwareBuffer : public IBuffer { public: VkHardwareBuffer(VulkanRenderDevice* fb); @@ -41,22 +35,21 @@ public: TArray mStaticUpload; }; -class VkHardwareVertexBuffer : public IVertexBuffer, public VkHardwareBuffer +class VkHardwareVertexBuffer : public VkHardwareBuffer { public: - VkHardwareVertexBuffer(VulkanRenderDevice* fb) : VkHardwareBuffer(fb) { mBufferType = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; } - void SetFormat(int numBindingPoints, int numAttributes, size_t stride, const FVertexBufferAttribute *attrs) override; + VkHardwareVertexBuffer(VulkanRenderDevice* fb, int vertexFormat) : VkHardwareBuffer(fb), VertexFormat(vertexFormat) { mBufferType = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; } int VertexFormat = -1; }; -class VkHardwareIndexBuffer : public IIndexBuffer, public VkHardwareBuffer +class VkHardwareIndexBuffer : public VkHardwareBuffer { public: VkHardwareIndexBuffer(VulkanRenderDevice* fb) : VkHardwareBuffer(fb) { mBufferType = VK_BUFFER_USAGE_INDEX_BUFFER_BIT; } }; -class VkHardwareDataBuffer : public IDataBuffer, public VkHardwareBuffer +class VkHardwareDataBuffer : public VkHardwareBuffer { public: VkHardwareDataBuffer(VulkanRenderDevice* fb, bool ssbo, bool needresize) : VkHardwareBuffer(fb) diff --git a/src/common/rendering/vulkan/vk_renderdevice.cpp b/src/common/rendering/vulkan/vk_renderdevice.cpp index a3bb4720b9..7fbe520477 100644 --- a/src/common/rendering/vulkan/vk_renderdevice.cpp +++ b/src/common/rendering/vulkan/vk_renderdevice.cpp @@ -312,42 +312,42 @@ FMaterial* VulkanRenderDevice::CreateMaterial(FGameTexture* tex, int scaleflags) return new VkMaterial(this, tex, scaleflags); } -IVertexBuffer *VulkanRenderDevice::CreateVertexBuffer() +IBuffer*VulkanRenderDevice::CreateVertexBuffer(int numBindingPoints, int numAttributes, size_t stride, const FVertexBufferAttribute* attrs) { - return GetBufferManager()->CreateVertexBuffer(); + return GetBufferManager()->CreateVertexBuffer(numBindingPoints, numAttributes, stride, attrs); } -IIndexBuffer *VulkanRenderDevice::CreateIndexBuffer() +IBuffer*VulkanRenderDevice::CreateIndexBuffer() { return GetBufferManager()->CreateIndexBuffer(); } -IDataBuffer* VulkanRenderDevice::CreateLightBuffer() +IBuffer* VulkanRenderDevice::CreateLightBuffer() { return GetBufferManager()->CreateLightBuffer(); } -IDataBuffer* VulkanRenderDevice::CreateBoneBuffer() +IBuffer* VulkanRenderDevice::CreateBoneBuffer() { return GetBufferManager()->CreateBoneBuffer(); } -IDataBuffer* VulkanRenderDevice::CreateViewpointBuffer() +IBuffer* VulkanRenderDevice::CreateViewpointBuffer() { return GetBufferManager()->CreateViewpointBuffer(); } -IDataBuffer* VulkanRenderDevice::CreateShadowmapNodesBuffer() +IBuffer* VulkanRenderDevice::CreateShadowmapNodesBuffer() { return GetBufferManager()->CreateShadowmapNodesBuffer(); } -IDataBuffer* VulkanRenderDevice::CreateShadowmapLinesBuffer() +IBuffer* VulkanRenderDevice::CreateShadowmapLinesBuffer() { return GetBufferManager()->CreateShadowmapLinesBuffer(); } -IDataBuffer* VulkanRenderDevice::CreateShadowmapLightsBuffer() +IBuffer* VulkanRenderDevice::CreateShadowmapLightsBuffer() { return GetBufferManager()->CreateShadowmapLightsBuffer(); } diff --git a/src/common/rendering/vulkan/vk_renderdevice.h b/src/common/rendering/vulkan/vk_renderdevice.h index aacad9b0c2..ab26359b74 100644 --- a/src/common/rendering/vulkan/vk_renderdevice.h +++ b/src/common/rendering/vulkan/vk_renderdevice.h @@ -72,15 +72,16 @@ public: IHardwareTexture *CreateHardwareTexture(int numchannels) override; FMaterial* CreateMaterial(FGameTexture* tex, int scaleflags) override; - IVertexBuffer *CreateVertexBuffer() override; - IIndexBuffer *CreateIndexBuffer() override; - IDataBuffer* CreateLightBuffer() override; - IDataBuffer* CreateBoneBuffer() override; - IDataBuffer* CreateViewpointBuffer() override; - IDataBuffer* CreateShadowmapNodesBuffer() override; - IDataBuffer* CreateShadowmapLinesBuffer() override; - IDataBuffer* CreateShadowmapLightsBuffer() override; + IBuffer* CreateVertexBuffer(int numBindingPoints, int numAttributes, size_t stride, const FVertexBufferAttribute* attrs) override; + IBuffer* CreateIndexBuffer() override; + + IBuffer* CreateLightBuffer() override; + IBuffer* CreateBoneBuffer() override; + IBuffer* CreateViewpointBuffer() override; + IBuffer* CreateShadowmapNodesBuffer() override; + IBuffer* CreateShadowmapLinesBuffer() override; + IBuffer* CreateShadowmapLightsBuffer() override; FTexture *WipeStartScreen() override; FTexture *WipeEndScreen() override; diff --git a/src/common/rendering/vulkan/vk_renderstate.cpp b/src/common/rendering/vulkan/vk_renderstate.cpp index be80982735..73d047337b 100644 --- a/src/common/rendering/vulkan/vk_renderstate.cpp +++ b/src/common/rendering/vulkan/vk_renderstate.cpp @@ -585,7 +585,7 @@ void VkRenderStateMolten::Draw(int dt, int index, int count, bool apply) { if (dt == DT_TriangleFan) { - IIndexBuffer *oldIndexBuffer = mIndexBuffer; + IBuffer* oldIndexBuffer = mIndexBuffer; mIndexBuffer = fb->GetBufferManager()->FanToTrisIndexBuffer.get(); if (apply || mNeedApply) diff --git a/src/common/rendering/vulkan/vk_renderstate.h b/src/common/rendering/vulkan/vk_renderstate.h index 777ea2868d..c78dd39437 100644 --- a/src/common/rendering/vulkan/vk_renderstate.h +++ b/src/common/rendering/vulkan/vk_renderstate.h @@ -104,8 +104,8 @@ protected: VkMatrixBufferWriter mMatrixBufferWriter; int mLastVertexOffsets[2] = { 0, 0 }; - IVertexBuffer *mLastVertexBuffer = nullptr; - IIndexBuffer *mLastIndexBuffer = nullptr; + IBuffer* mLastVertexBuffer = nullptr; + IBuffer* mLastIndexBuffer = nullptr; bool mLastModelMatrixEnabled = true; bool mLastTextureMatrixEnabled = true;