| 1090 | } |
| 1091 | |
| 1092 | void GPUContextVulkan::BindVB(const Span<GPUBuffer*>& vertexBuffers, const uint32* vertexBuffersOffsets, GPUVertexLayout* vertexLayout) |
| 1093 | { |
| 1094 | _vbCount = vertexBuffers.Length(); |
| 1095 | if (!vertexLayout) |
| 1096 | vertexLayout = GPUVertexLayout::Get(vertexBuffers); |
| 1097 | if (_vertexLayout != vertexLayout) |
| 1098 | { |
| 1099 | _vertexLayout = (GPUVertexLayoutVulkan*)vertexLayout; |
| 1100 | _psDirtyFlag = true; |
| 1101 | } |
| 1102 | if (vertexBuffers.Length() == 0) |
| 1103 | return; |
| 1104 | const auto cmdBuffer = _cmdBufferManager->GetCmdBuffer(); |
| 1105 | VkBuffer buffers[GPU_MAX_VB_BINDED]; |
| 1106 | VkDeviceSize offsets[GPU_MAX_VB_BINDED]; |
| 1107 | for (int32 i = 0; i < vertexBuffers.Length(); i++) |
| 1108 | { |
| 1109 | auto vbVulkan = static_cast<GPUBufferVulkan*>(vertexBuffers[i]); |
| 1110 | if (!vbVulkan) |
| 1111 | vbVulkan = _device->HelperResources.GetDummyVertexBuffer(); |
| 1112 | buffers[i] = vbVulkan->GetHandle(); |
| 1113 | offsets[i] = vertexBuffersOffsets ? vertexBuffersOffsets[i] : 0; |
| 1114 | } |
| 1115 | vkCmdBindVertexBuffers(cmdBuffer->GetHandle(), 0, vertexBuffers.Length(), buffers, offsets); |
| 1116 | } |
| 1117 | |
| 1118 | void GPUContextVulkan::BindIB(GPUBuffer* indexBuffer) |
| 1119 | { |
no test coverage detected