fix: 修复VertexBuffer/IndexBuffer SizeInBytes错误及Fence Signal类型问题
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
#include "D3D12RHI.h"
|
#include "D3D12RHI.h"
|
||||||
|
#include "D3D12Resources.h"
|
||||||
#include <RHI\RHIDefines.h>
|
#include <RHI\RHIDefines.h>
|
||||||
|
#include <Rendering\Resources.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@@ -717,10 +719,10 @@ void D3D12CommandList::SetPrimitiveTopology(PrimitiveTopology topology) {
|
|||||||
|
|
||||||
void D3D12CommandList::SetVertexBuffer(uint32_t slot, IResource* buffer, uint32_t offset, uint32_t stride) {
|
void D3D12CommandList::SetVertexBuffer(uint32_t slot, IResource* buffer, uint32_t offset, uint32_t stride) {
|
||||||
if (buffer) {
|
if (buffer) {
|
||||||
D3D12Resource* d3dBuffer = static_cast<D3D12Resource*>(buffer);
|
D3D12VertexBuffer* vb = static_cast<D3D12VertexBuffer*>(buffer);
|
||||||
D3D12_VERTEX_BUFFER_VIEW vbView = {};
|
D3D12_VERTEX_BUFFER_VIEW vbView = {};
|
||||||
vbView.BufferLocation = d3dBuffer->GetNative()->GetGPUVirtualAddress() + offset;
|
vbView.BufferLocation = vb->GetNative()->GetGPUVirtualAddress() + offset;
|
||||||
vbView.SizeInBytes = (UINT)stride;
|
vbView.SizeInBytes = (UINT)vb->GetDesc().size;
|
||||||
vbView.StrideInBytes = stride;
|
vbView.StrideInBytes = stride;
|
||||||
m_commandList->IASetVertexBuffers(slot, 1, &vbView);
|
m_commandList->IASetVertexBuffers(slot, 1, &vbView);
|
||||||
}
|
}
|
||||||
@@ -728,11 +730,11 @@ void D3D12CommandList::SetVertexBuffer(uint32_t slot, IResource* buffer, uint32_
|
|||||||
|
|
||||||
void D3D12CommandList::SetIndexBuffer(IResource* buffer, uint32_t offset) {
|
void D3D12CommandList::SetIndexBuffer(IResource* buffer, uint32_t offset) {
|
||||||
if (buffer) {
|
if (buffer) {
|
||||||
D3D12Resource* d3dBuffer = static_cast<D3D12Resource*>(buffer);
|
D3D12IndexBuffer* ib = static_cast<D3D12IndexBuffer*>(buffer);
|
||||||
D3D12_INDEX_BUFFER_VIEW ibView = {};
|
D3D12_INDEX_BUFFER_VIEW ibView = {};
|
||||||
ibView.BufferLocation = d3dBuffer->GetNative()->GetGPUVirtualAddress() + offset;
|
ibView.BufferLocation = ib->GetNative()->GetGPUVirtualAddress() + offset;
|
||||||
ibView.Format = DXGI_FORMAT_R32_UINT;
|
ibView.Format = DXGI_FORMAT_R32_UINT;
|
||||||
ibView.SizeInBytes = 0;
|
ibView.SizeInBytes = (UINT)ib->GetDesc().size;
|
||||||
m_commandList->IASetIndexBuffer(&ibView);
|
m_commandList->IASetIndexBuffer(&ibView);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -101,9 +101,13 @@ void RenderContext::EndFrame() {
|
|||||||
queue->ExecuteCommandLists(&cmdListPtr, 1);
|
queue->ExecuteCommandLists(&cmdListPtr, 1);
|
||||||
EngineLog("EndFrame: after Execute");
|
EngineLog("EndFrame: after Execute");
|
||||||
|
|
||||||
|
EngineLog("EndFrame: before Signal");
|
||||||
m_fenceValue++;
|
m_fenceValue++;
|
||||||
queue->Signal(m_fence, m_fenceValue);
|
D3D12Fence* d3d12Fence = static_cast<D3D12Fence*>(m_fence);
|
||||||
EngineLog("EndFrame: before Wait, fenceValue=%llu", (unsigned long long)m_fenceValue);
|
queue->Signal(d3d12Fence->GetNativeFence(), m_fenceValue);
|
||||||
|
EngineLog("EndFrame: after Signal");
|
||||||
|
|
||||||
|
EngineLog("EndFrame: before Wait");
|
||||||
m_fence->Wait(m_fenceValue);
|
m_fence->Wait(m_fenceValue);
|
||||||
EngineLog("EndFrame: after Wait");
|
EngineLog("EndFrame: after Wait");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,16 +70,24 @@ bool StaticMeshComponent::Initialize(ICommandList* commandList, const char* file
|
|||||||
void StaticMeshComponent::Render(ICommandList* commandList) {
|
void StaticMeshComponent::Render(ICommandList* commandList) {
|
||||||
if (!m_vertexBuffer) return;
|
if (!m_vertexBuffer) return;
|
||||||
|
|
||||||
|
printf("StaticMesh::Render - before SetVertexBuffer\n");
|
||||||
commandList->SetVertexBuffer(0, m_vertexBuffer, 0, sizeof(MeshVertex));
|
commandList->SetVertexBuffer(0, m_vertexBuffer, 0, sizeof(MeshVertex));
|
||||||
|
printf("StaticMesh::Render - after SetVertexBuffer\n");
|
||||||
|
|
||||||
if (m_subMeshes.empty()) {
|
if (m_subMeshes.empty()) {
|
||||||
|
printf("StaticMesh::Render - before DrawInstanced\n");
|
||||||
commandList->DrawInstanced(m_vertexCount, 1, 0, 0);
|
commandList->DrawInstanced(m_vertexCount, 1, 0, 0);
|
||||||
|
printf("StaticMesh::Render - after DrawInstanced\n");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (auto& pair : m_subMeshes) {
|
for (auto& pair : m_subMeshes) {
|
||||||
SubMesh* submesh = pair.second;
|
SubMesh* submesh = pair.second;
|
||||||
|
printf("StaticMesh::Render - before SetIndexBuffer\n");
|
||||||
commandList->SetIndexBuffer(submesh->indexBuffer, 0);
|
commandList->SetIndexBuffer(submesh->indexBuffer, 0);
|
||||||
|
printf("StaticMesh::Render - after SetIndexBuffer\n");
|
||||||
|
printf("StaticMesh::Render - before DrawIndexedInstanced\n");
|
||||||
commandList->DrawIndexedInstanced(submesh->indexCount, 1, 0, 0, 0);
|
commandList->DrawIndexedInstanced(submesh->indexCount, 1, 0, 0, 0);
|
||||||
|
printf("StaticMesh::Render - after DrawIndexedInstanced\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user