diff --git a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp index 8c140c8b1c..f3b090a3f0 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp @@ -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 = {}; diff --git a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.h b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.h index 50419a5e42..9d4a6fa9a3 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.h +++ b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.h @@ -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 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(); diff --git a/rpcs3/Emu/RSX/D3D12/D3D12PipelineState.cpp b/rpcs3/Emu/RSX/D3D12/D3D12PipelineState.cpp index c08b247907..6927e4e451 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12PipelineState.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12PipelineState.cpp @@ -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 = {};