mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-08-04 07:09:51 +00:00
d3d12: Fix vertex buffer sometimes incomplete.
This commit is contained in:
parent
e55949dbfa
commit
ad55cced13
1 changed files with 7 additions and 1 deletions
|
@ -195,6 +195,9 @@ static
|
||||||
ID3D12Resource *createVertexBuffer(const VertexBufferFormat &vbf, const RSXVertexData *vertexData, ID3D12Device *device, DataHeap &vertexIndexHeap)
|
ID3D12Resource *createVertexBuffer(const VertexBufferFormat &vbf, const RSXVertexData *vertexData, ID3D12Device *device, DataHeap &vertexIndexHeap)
|
||||||
{
|
{
|
||||||
size_t subBufferSize = vbf.range.second - vbf.range.first + 1;
|
size_t subBufferSize = vbf.range.second - vbf.range.first + 1;
|
||||||
|
// Make multiple of stride
|
||||||
|
if (vbf.stride)
|
||||||
|
subBufferSize = ((subBufferSize + vbf.stride - 1) / vbf.stride) * vbf.stride;
|
||||||
assert(vertexIndexHeap.canAlloc(subBufferSize));
|
assert(vertexIndexHeap.canAlloc(subBufferSize));
|
||||||
size_t heapOffset = vertexIndexHeap.alloc(subBufferSize);
|
size_t heapOffset = vertexIndexHeap.alloc(subBufferSize);
|
||||||
|
|
||||||
|
@ -209,7 +212,7 @@ ID3D12Resource *createVertexBuffer(const VertexBufferFormat &vbf, const RSXVerte
|
||||||
));
|
));
|
||||||
void *bufferMap;
|
void *bufferMap;
|
||||||
check(vertexBuffer->Map(0, nullptr, (void**)&bufferMap));
|
check(vertexBuffer->Map(0, nullptr, (void**)&bufferMap));
|
||||||
|
memset(bufferMap, -1, subBufferSize);
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
for (int vertex = 0; vertex < vbf.elementCount; vertex++)
|
for (int vertex = 0; vertex < vbf.elementCount; vertex++)
|
||||||
{
|
{
|
||||||
|
@ -269,7 +272,10 @@ std::pair<std::vector<D3D12_VERTEX_BUFFER_VIEW>, D3D12_INDEX_BUFFER_VIEW> D3D12G
|
||||||
for (size_t buffer = 0; buffer < vertexBufferFormat.size(); buffer++)
|
for (size_t buffer = 0; buffer < vertexBufferFormat.size(); buffer++)
|
||||||
{
|
{
|
||||||
const VertexBufferFormat &vbf = vertexBufferFormat[buffer];
|
const VertexBufferFormat &vbf = vertexBufferFormat[buffer];
|
||||||
|
// Make multiple of stride
|
||||||
size_t subBufferSize = vbf.range.second - vbf.range.first + 1;
|
size_t subBufferSize = vbf.range.second - vbf.range.first + 1;
|
||||||
|
if (vbf.stride)
|
||||||
|
subBufferSize = ((subBufferSize + vbf.stride - 1) / vbf.stride) * vbf.stride;
|
||||||
|
|
||||||
ID3D12Resource *vertexBuffer = createVertexBuffer(vbf, m_vertex_data, m_device, m_vertexIndexData);
|
ID3D12Resource *vertexBuffer = createVertexBuffer(vbf, m_vertex_data, m_device, m_vertexIndexData);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue