From f33acf73345d1091d18907cbde45858fb5d4061e Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Thu, 7 Dec 2017 11:39:59 +0100 Subject: [PATCH] [dxvk] Modified interface to accept dynamic vertex buffer strides --- src/dxvk/dxvk_context.cpp | 9 ++++++++- src/dxvk/dxvk_context.h | 4 +++- src/dxvk/dxvk_context_state.h | 2 ++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index 1a286bb6..67f2eb88 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -179,11 +179,17 @@ namespace dxvk { void DxvkContext::bindVertexBuffer( uint32_t binding, - const DxvkBufferBinding& buffer) { + const DxvkBufferBinding& buffer, + uint32_t stride) { if (m_state.vi.vertexBuffers.at(binding) != buffer) { m_state.vi.vertexBuffers.at(binding) = buffer; m_flags.set(DxvkContextFlag::GpDirtyVertexBuffers); } + + if (m_state.vi.vertexStrides.at(binding) != stride) { + m_state.vi.vertexStrides.at(binding) = stride; + m_flags.set(DxvkContextFlag::GpDirtyPipelineState); + } } @@ -475,6 +481,7 @@ namespace dxvk { gpState.blendState = m_state.co.blendState; gpState.renderPass = m_state.om.framebuffer->renderPass(); gpState.viewportCount = m_state.vp.viewportCount; + // TODO add vertex buffer strides m_cmd->cmdBindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, m_state.gp.pipeline->getPipelineHandle(gpState)); diff --git a/src/dxvk/dxvk_context.h b/src/dxvk/dxvk_context.h index 52f5f48d..d40c49c6 100644 --- a/src/dxvk/dxvk_context.h +++ b/src/dxvk/dxvk_context.h @@ -134,10 +134,12 @@ namespace dxvk { * * \param [in] binding Vertex buffer binding * \param [in] buffer New vertex buffer + * \param [in] stride Stride between vertices */ void bindVertexBuffer( uint32_t binding, - const DxvkBufferBinding& buffer); + const DxvkBufferBinding& buffer, + uint32_t stride); /** * \brief Clears subresources of a color image diff --git a/src/dxvk/dxvk_context_state.h b/src/dxvk/dxvk_context_state.h index 58cb361a..4b91f8c3 100644 --- a/src/dxvk/dxvk_context_state.h +++ b/src/dxvk/dxvk_context_state.h @@ -40,6 +40,8 @@ namespace dxvk { DxvkBufferBinding indexBuffer; std::array vertexBuffers; + std::array vertexStrides; };