d3d12: Start writing vertex/index buffer support

This commit is contained in:
vlj 2015-05-11 20:45:02 +02:00 committed by Vincent Lejeune
parent 722e6b8ac5
commit fedd35989c
3 changed files with 31 additions and 26 deletions

View File

@ -293,27 +293,41 @@ void D3D12GSRender::EnableVertexData(bool indexed_draw)
m_vdata.resize(m_vdata.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();
m_vao.Bind();
checkForGlError("initializing vao");
m_vbo.Create(indexed_draw ? 2 : 1);
m_vbo.Bind(0);
m_vbo.SetData(m_vdata.data(), m_vdata.size());*/
check(m_vertexBuffer->Map(0, nullptr, (void**)&bufferMap));
memcpy(bufferMap, m_vdata.data(), m_vdata.size());
m_vertexBuffer->Unmap(0, nullptr);
if (indexed_draw)
{
// 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_indexed_array.m_data.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,
@ -322,9 +336,9 @@ void D3D12GSRender::EnableVertexData(bool indexed_draw)
nullptr,
IID_PPV_ARGS(&m_indexBuffer)
));
void *indexBufferMap;
check(m_indexBuffer->Map(0, nullptr, (void**)indexBufferMap));
memcpy(indexBufferMap, m_indexed_array.m_data.data(), m_indexed_array.m_data.size());
check(m_indexBuffer->Map(0, nullptr, (void**)&bufferMap));
memcpy(bufferMap, m_indexed_array.m_data.data(), m_indexed_array.m_data.size());
m_indexBuffer->Unmap(0, nullptr);
D3D12_INDEX_BUFFER_VIEW indexBufferView = {};

View File

@ -48,18 +48,12 @@ private:
PipelineStateObjectCache m_cachePSO;
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_vertex_textures[m_textures_count];
ID3D12Resource *m_indexBuffer;
ID3D12Resource *m_indexBuffer, *m_vertexBuffer;
std::vector<D3D12_INPUT_ELEMENT_DESC> m_IASet;
// GLvao m_vao;
// GLvbo m_vbo;
D3D12RenderTargetSets *m_fbo;
ID3D12Device* m_device;
ID3D12CommandQueue *m_commandQueueCopy;
@ -89,9 +83,6 @@ private:
void InitVertexData();
void InitFragmentData();
void Enable(bool enable, const u32 cap);
void WriteBuffers();
void WriteDepthBuffer();
void WriteColorBuffers();

View File

@ -157,9 +157,9 @@ ID3D12PipelineState *PipelineStateObjectCache::getGraphicPipelineState(ID3D12Dev
}
else
{
/* LOG_WARNING(RSX, "Add program :");
LOG_WARNING(RSX, "Add program :");
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 = {};