mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-29 22:20:48 +00:00
d3d12: Do not use array size to get vertex buffer element count.
This commit is contained in:
parent
f898ebff3f
commit
703b1636c8
@ -168,7 +168,7 @@ bool overlaps(const std::pair<size_t, size_t> &range1, const std::pair<size_t, s
|
|||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
std::vector<VertexBufferFormat> FormatVertexData(const RSXVertexData *m_vertex_data, size_t base_offset)
|
std::vector<VertexBufferFormat> FormatVertexData(const RSXVertexData *m_vertex_data, size_t *vertex_data_size, size_t base_offset)
|
||||||
{
|
{
|
||||||
std::vector<VertexBufferFormat> Result;
|
std::vector<VertexBufferFormat> Result;
|
||||||
for (size_t i = 0; i < 32; ++i)
|
for (size_t i = 0; i < 32; ++i)
|
||||||
@ -176,7 +176,7 @@ std::vector<VertexBufferFormat> FormatVertexData(const RSXVertexData *m_vertex_d
|
|||||||
const RSXVertexData &vertexData = m_vertex_data[i];
|
const RSXVertexData &vertexData = m_vertex_data[i];
|
||||||
if (!vertexData.IsEnabled()) continue;
|
if (!vertexData.IsEnabled()) continue;
|
||||||
|
|
||||||
size_t elementCount = vertexData.data.size() / (vertexData.size * vertexData.GetTypeSize());
|
size_t elementCount = vertex_data_size[i] / (vertexData.size * vertexData.GetTypeSize());
|
||||||
// If there is a single element, stride is 0, use the size of element instead
|
// If there is a single element, stride is 0, use the size of element instead
|
||||||
size_t stride = vertexData.stride;
|
size_t stride = vertexData.stride;
|
||||||
size_t elementSize = vertexData.GetTypeSize();
|
size_t elementSize = vertexData.GetTypeSize();
|
||||||
@ -281,7 +281,7 @@ isContained(const std::vector<std::pair<u32, u32> > &ranges, const std::pair<u32
|
|||||||
std::vector<D3D12_VERTEX_BUFFER_VIEW> D3D12GSRender::UploadVertexBuffers(bool indexed_draw)
|
std::vector<D3D12_VERTEX_BUFFER_VIEW> D3D12GSRender::UploadVertexBuffers(bool indexed_draw)
|
||||||
{
|
{
|
||||||
std::vector<D3D12_VERTEX_BUFFER_VIEW> result;
|
std::vector<D3D12_VERTEX_BUFFER_VIEW> result;
|
||||||
const std::vector<VertexBufferFormat> &vertexBufferFormat = FormatVertexData(m_vertex_data, m_vertex_data_base_offset);
|
const std::vector<VertexBufferFormat> &vertexBufferFormat = FormatVertexData(m_vertex_data, m_vertexBufferSize, m_vertex_data_base_offset);
|
||||||
m_IASet = getIALayout(m_device.Get(), vertexBufferFormat, m_vertex_data, m_vertex_data_base_offset);
|
m_IASet = getIALayout(m_device.Get(), vertexBufferFormat, m_vertex_data, m_vertex_data_base_offset);
|
||||||
|
|
||||||
const u32 data_offset = indexed_draw ? 0 : m_draw_array_first;
|
const u32 data_offset = indexed_draw ? 0 : m_draw_array_first;
|
||||||
|
@ -475,7 +475,6 @@ void D3D12GSRender::Draw()
|
|||||||
std::chrono::time_point<std::chrono::system_clock> vertexIndexDurationStart = std::chrono::system_clock::now();
|
std::chrono::time_point<std::chrono::system_clock> vertexIndexDurationStart = std::chrono::system_clock::now();
|
||||||
|
|
||||||
// Init vertex count
|
// Init vertex count
|
||||||
// TODO: Very hackish, clean this
|
|
||||||
if (m_indexed_array.m_count)
|
if (m_indexed_array.m_count)
|
||||||
{
|
{
|
||||||
for (u32 i = 0; i < m_vertex_count; ++i)
|
for (u32 i = 0; i < m_vertex_count; ++i)
|
||||||
@ -484,7 +483,7 @@ void D3D12GSRender::Draw()
|
|||||||
if (!m_vertex_data[i].addr) continue;
|
if (!m_vertex_data[i].addr) continue;
|
||||||
|
|
||||||
const u32 tsize = m_vertex_data[i].GetTypeSize();
|
const u32 tsize = m_vertex_data[i].GetTypeSize();
|
||||||
m_vertex_data[i].data.resize((m_indexed_array.index_min + m_indexed_array.index_max - m_indexed_array.index_min + 1) * tsize * m_vertex_data[i].size);
|
m_vertexBufferSize[i] = (m_indexed_array.index_min + m_indexed_array.index_max - m_indexed_array.index_min + 1) * tsize * m_vertex_data[i].size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -495,7 +494,7 @@ void D3D12GSRender::Draw()
|
|||||||
if (!m_vertex_data[i].addr) continue;
|
if (!m_vertex_data[i].addr) continue;
|
||||||
|
|
||||||
const u32 tsize = m_vertex_data[i].GetTypeSize();
|
const u32 tsize = m_vertex_data[i].GetTypeSize();
|
||||||
m_vertex_data[i].data.resize((m_draw_array_first + m_draw_array_count) * tsize * m_vertex_data[i].size);
|
m_vertexBufferSize[i] = (m_draw_array_first + m_draw_array_count) * tsize * m_vertex_data[i].size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,6 +232,8 @@ private:
|
|||||||
PipelineStateObjectCache m_cachePSO;
|
PipelineStateObjectCache m_cachePSO;
|
||||||
std::pair<ID3D12PipelineState *, size_t> *m_PSO;
|
std::pair<ID3D12PipelineState *, size_t> *m_PSO;
|
||||||
|
|
||||||
|
size_t m_vertexBufferSize[32];
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
size_t m_drawCallDuration;
|
size_t m_drawCallDuration;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user