mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-07 15:31:26 +12:00
d3d12: Start writing vertex/index buffer support
This commit is contained in:
parent
722e6b8ac5
commit
fedd35989c
3 changed files with 31 additions and 26 deletions
|
@ -293,27 +293,41 @@ void D3D12GSRender::EnableVertexData(bool indexed_draw)
|
||||||
m_vdata.resize(m_vdata.size() + data_size);
|
m_vdata.resize(m_vdata.size() + data_size);
|
||||||
memcpy(&m_vdata[pos], &m_vertex_data[i].data[data_offset * item_size], data_size);
|
memcpy(&m_vdata[pos], &m_vertex_data[i].data[data_offset * item_size], data_size);
|
||||||
}
|
}
|
||||||
|
// TODO: Use default heap and upload data
|
||||||
|
D3D12_HEAP_PROPERTIES heapProp = {};
|
||||||
|
heapProp.Type = D3D12_HEAP_TYPE_UPLOAD;
|
||||||
|
D3D12_RESOURCE_DESC resDesc = {};
|
||||||
|
resDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;
|
||||||
|
resDesc.Width = (UINT)m_vdata.size();
|
||||||
|
resDesc.Height = 1;
|
||||||
|
resDesc.DepthOrArraySize = 1;
|
||||||
|
resDesc.SampleDesc.Count = 1;
|
||||||
|
resDesc.MipLevels = 1;
|
||||||
|
resDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;
|
||||||
|
check(m_device->CreateCommittedResource(
|
||||||
|
&heapProp,
|
||||||
|
D3D12_HEAP_FLAG_NONE,
|
||||||
|
&resDesc,
|
||||||
|
D3D12_RESOURCE_STATE_GENERIC_READ,
|
||||||
|
nullptr,
|
||||||
|
IID_PPV_ARGS(&m_vertexBuffer)
|
||||||
|
));
|
||||||
|
void *bufferMap;
|
||||||
|
|
||||||
/* m_vao.Create();
|
check(m_vertexBuffer->Map(0, nullptr, (void**)&bufferMap));
|
||||||
m_vao.Bind();
|
memcpy(bufferMap, m_vdata.data(), m_vdata.size());
|
||||||
checkForGlError("initializing vao");
|
m_vertexBuffer->Unmap(0, nullptr);
|
||||||
|
|
||||||
m_vbo.Create(indexed_draw ? 2 : 1);
|
|
||||||
m_vbo.Bind(0);
|
|
||||||
m_vbo.SetData(m_vdata.data(), m_vdata.size());*/
|
|
||||||
|
|
||||||
if (indexed_draw)
|
if (indexed_draw)
|
||||||
{
|
{
|
||||||
// TODO: Use default heap and upload data
|
|
||||||
D3D12_HEAP_PROPERTIES heapProp = {};
|
|
||||||
heapProp.Type = D3D12_HEAP_TYPE_UPLOAD;
|
|
||||||
|
|
||||||
D3D12_RESOURCE_DESC resDesc = {};
|
D3D12_RESOURCE_DESC resDesc = {};
|
||||||
resDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;
|
resDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;
|
||||||
resDesc.Width = (UINT)m_indexed_array.m_data.size();
|
resDesc.Width = (UINT)m_indexed_array.m_data.size();
|
||||||
resDesc.Height = 1;
|
resDesc.Height = 1;
|
||||||
resDesc.DepthOrArraySize = 1;
|
resDesc.DepthOrArraySize = 1;
|
||||||
resDesc.SampleDesc.Count = 1;
|
resDesc.SampleDesc.Count = 1;
|
||||||
|
resDesc.MipLevels = 1;
|
||||||
|
resDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;
|
||||||
check(m_device->CreateCommittedResource(
|
check(m_device->CreateCommittedResource(
|
||||||
&heapProp,
|
&heapProp,
|
||||||
D3D12_HEAP_FLAG_NONE,
|
D3D12_HEAP_FLAG_NONE,
|
||||||
|
@ -322,9 +336,9 @@ void D3D12GSRender::EnableVertexData(bool indexed_draw)
|
||||||
nullptr,
|
nullptr,
|
||||||
IID_PPV_ARGS(&m_indexBuffer)
|
IID_PPV_ARGS(&m_indexBuffer)
|
||||||
));
|
));
|
||||||
void *indexBufferMap;
|
|
||||||
check(m_indexBuffer->Map(0, nullptr, (void**)indexBufferMap));
|
check(m_indexBuffer->Map(0, nullptr, (void**)&bufferMap));
|
||||||
memcpy(indexBufferMap, m_indexed_array.m_data.data(), m_indexed_array.m_data.size());
|
memcpy(bufferMap, m_indexed_array.m_data.data(), m_indexed_array.m_data.size());
|
||||||
m_indexBuffer->Unmap(0, nullptr);
|
m_indexBuffer->Unmap(0, nullptr);
|
||||||
|
|
||||||
D3D12_INDEX_BUFFER_VIEW indexBufferView = {};
|
D3D12_INDEX_BUFFER_VIEW indexBufferView = {};
|
||||||
|
|
|
@ -48,18 +48,12 @@ private:
|
||||||
|
|
||||||
PipelineStateObjectCache m_cachePSO;
|
PipelineStateObjectCache m_cachePSO;
|
||||||
ID3D12PipelineState *m_PSO;
|
ID3D12PipelineState *m_PSO;
|
||||||
// GLProgramBuffer m_prog_buffer;
|
|
||||||
|
|
||||||
// GLFragmentProgram m_fragment_prog;
|
|
||||||
// GLVertexProgram m_vertex_prog;
|
|
||||||
|
|
||||||
// GLTexture m_gl_textures[m_textures_count];
|
// GLTexture m_gl_textures[m_textures_count];
|
||||||
// GLTexture m_gl_vertex_textures[m_textures_count];
|
// GLTexture m_gl_vertex_textures[m_textures_count];
|
||||||
|
|
||||||
ID3D12Resource *m_indexBuffer;
|
ID3D12Resource *m_indexBuffer, *m_vertexBuffer;
|
||||||
std::vector<D3D12_INPUT_ELEMENT_DESC> m_IASet;
|
std::vector<D3D12_INPUT_ELEMENT_DESC> m_IASet;
|
||||||
// GLvao m_vao;
|
|
||||||
// GLvbo m_vbo;
|
|
||||||
D3D12RenderTargetSets *m_fbo;
|
D3D12RenderTargetSets *m_fbo;
|
||||||
ID3D12Device* m_device;
|
ID3D12Device* m_device;
|
||||||
ID3D12CommandQueue *m_commandQueueCopy;
|
ID3D12CommandQueue *m_commandQueueCopy;
|
||||||
|
@ -89,9 +83,6 @@ private:
|
||||||
void InitVertexData();
|
void InitVertexData();
|
||||||
void InitFragmentData();
|
void InitFragmentData();
|
||||||
|
|
||||||
void Enable(bool enable, const u32 cap);
|
|
||||||
|
|
||||||
|
|
||||||
void WriteBuffers();
|
void WriteBuffers();
|
||||||
void WriteDepthBuffer();
|
void WriteDepthBuffer();
|
||||||
void WriteColorBuffers();
|
void WriteColorBuffers();
|
||||||
|
|
|
@ -157,9 +157,9 @@ ID3D12PipelineState *PipelineStateObjectCache::getGraphicPipelineState(ID3D12Dev
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* LOG_WARNING(RSX, "Add program :");
|
LOG_WARNING(RSX, "Add program :");
|
||||||
LOG_WARNING(RSX, "*** vp id = %d", m_vertex_prog.Id);
|
LOG_WARNING(RSX, "*** vp id = %d", m_vertex_prog.Id);
|
||||||
LOG_WARNING(RSX, "*** fp id = %d", m_fragment_prog.Id);*/
|
LOG_WARNING(RSX, "*** fp id = %d", m_fragment_prog.Id);
|
||||||
|
|
||||||
D3D12_GRAPHICS_PIPELINE_STATE_DESC graphicPipelineStateDesc = {};
|
D3D12_GRAPHICS_PIPELINE_STATE_DESC graphicPipelineStateDesc = {};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue