mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-26 11:48:55 +01:00
internal/graphicsdriver/directx: refactoring
This commit is contained in:
parent
348435f769
commit
4adf46c2b0
@ -76,8 +76,8 @@ func _ID3D12GraphicsCommandList_IASetPrimitiveTopology(i *_ID3D12GraphicsCommand
|
|||||||
C.Ebitengine_ID3D12GraphicsCommandList_IASetPrimitiveTopology(unsafe.Pointer(i), C.int32_t(primitiveTopology))
|
C.Ebitengine_ID3D12GraphicsCommandList_IASetPrimitiveTopology(unsafe.Pointer(i), C.int32_t(primitiveTopology))
|
||||||
}
|
}
|
||||||
|
|
||||||
func _ID3D12GraphicsCommandList_IASetVertexBuffers(i *_ID3D12GraphicsCommandList, startSlot uint32, numViews uint32, pViews *_D3D12_VERTEX_BUFFER_VIEW) {
|
func _ID3D12GraphicsCommandList_IASetVertexBuffers(i *_ID3D12GraphicsCommandList, startSlot uint32, pViews []_D3D12_VERTEX_BUFFER_VIEW) {
|
||||||
C.Ebitengine_ID3D12GraphicsCommandList_IASetVertexBuffers(unsafe.Pointer(i), C.uint32_t(startSlot), C.uint32_t(numViews), unsafe.Pointer(pViews))
|
C.Ebitengine_ID3D12GraphicsCommandList_IASetVertexBuffers(unsafe.Pointer(i), C.uint32_t(startSlot), C.uint32_t(len(pViews)), unsafe.Pointer(&pViews[0]))
|
||||||
}
|
}
|
||||||
|
|
||||||
func _ID3D12GraphicsCommandList_OMSetStencilRef(i *_ID3D12GraphicsCommandList, stencilRef uint32) {
|
func _ID3D12GraphicsCommandList_OMSetStencilRef(i *_ID3D12GraphicsCommandList, stencilRef uint32) {
|
||||||
|
@ -29,7 +29,7 @@ func _ID3D12GraphicsCommandList_IASetPrimitiveTopology(i *_ID3D12GraphicsCommand
|
|||||||
panic("not implemented")
|
panic("not implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
func _ID3D12GraphicsCommandList_IASetVertexBuffers(i *_ID3D12GraphicsCommandList, startSlot uint32, numViews uint32, pViews *_D3D12_VERTEX_BUFFER_VIEW) {
|
func _ID3D12GraphicsCommandList_IASetVertexBuffers(i *_ID3D12GraphicsCommandList, startSlot uint32, pViews []_D3D12_VERTEX_BUFFER_VIEW) {
|
||||||
panic("not implemented")
|
panic("not implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1750,17 +1750,17 @@ type _ID3D12GraphicsCommandList_Vtbl struct {
|
|||||||
_ uintptr
|
_ uintptr
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *_ID3D12GraphicsCommandList) ClearDepthStencilView(depthStencilView _D3D12_CPU_DESCRIPTOR_HANDLE, clearFlags _D3D12_CLEAR_FLAGS, depth float32, stencil uint8, numRects uint32, pRects *_D3D12_RECT) {
|
func (i *_ID3D12GraphicsCommandList) ClearDepthStencilView(depthStencilView _D3D12_CPU_DESCRIPTOR_HANDLE, clearFlags _D3D12_CLEAR_FLAGS, depth float32, stencil uint8, pRects []_D3D12_RECT) {
|
||||||
syscall.Syscall9(i.vtbl.ClearDepthStencilView, 7, uintptr(unsafe.Pointer(i)),
|
syscall.Syscall9(i.vtbl.ClearDepthStencilView, 7, uintptr(unsafe.Pointer(i)),
|
||||||
depthStencilView.ptr, uintptr(clearFlags), uintptr(math.Float32bits(depth)),
|
depthStencilView.ptr, uintptr(clearFlags), uintptr(math.Float32bits(depth)),
|
||||||
uintptr(stencil), uintptr(numRects), uintptr(unsafe.Pointer(pRects)),
|
uintptr(stencil), uintptr(len(pRects)), uintptr(unsafe.Pointer(&pRects[0])),
|
||||||
0, 0)
|
0, 0)
|
||||||
runtime.KeepAlive(pRects)
|
runtime.KeepAlive(pRects)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *_ID3D12GraphicsCommandList) ClearRenderTargetView(pRenderTargetView _D3D12_CPU_DESCRIPTOR_HANDLE, colorRGBA [4]float32, numRects uint32, pRects *_D3D12_RECT) {
|
func (i *_ID3D12GraphicsCommandList) ClearRenderTargetView(pRenderTargetView _D3D12_CPU_DESCRIPTOR_HANDLE, colorRGBA [4]float32, pRects []_D3D12_RECT) {
|
||||||
syscall.Syscall6(i.vtbl.ClearRenderTargetView, 5, uintptr(unsafe.Pointer(i)),
|
syscall.Syscall6(i.vtbl.ClearRenderTargetView, 5, uintptr(unsafe.Pointer(i)),
|
||||||
pRenderTargetView.ptr, uintptr(unsafe.Pointer(&colorRGBA[0])), uintptr(numRects), uintptr(unsafe.Pointer(pRects)),
|
pRenderTargetView.ptr, uintptr(unsafe.Pointer(&colorRGBA[0])), uintptr(len(pRects)), uintptr(unsafe.Pointer(&pRects[0])),
|
||||||
0)
|
0)
|
||||||
runtime.KeepAlive(pRenderTargetView)
|
runtime.KeepAlive(pRenderTargetView)
|
||||||
}
|
}
|
||||||
@ -1835,13 +1835,13 @@ func (i *_ID3D12GraphicsCommandList) IASetPrimitiveTopology(primitiveTopology _D
|
|||||||
uintptr(primitiveTopology), 0)
|
uintptr(primitiveTopology), 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *_ID3D12GraphicsCommandList) IASetVertexBuffers(startSlot uint32, numViews uint32, pViews *_D3D12_VERTEX_BUFFER_VIEW) {
|
func (i *_ID3D12GraphicsCommandList) IASetVertexBuffers(startSlot uint32, pViews []_D3D12_VERTEX_BUFFER_VIEW) {
|
||||||
if microsoftgdk.IsXbox() {
|
if microsoftgdk.IsXbox() {
|
||||||
_ID3D12GraphicsCommandList_IASetVertexBuffers(i, startSlot, numViews, pViews)
|
_ID3D12GraphicsCommandList_IASetVertexBuffers(i, startSlot, pViews)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
syscall.Syscall6(i.vtbl.IASetVertexBuffers, 4, uintptr(unsafe.Pointer(i)),
|
syscall.Syscall6(i.vtbl.IASetVertexBuffers, 4, uintptr(unsafe.Pointer(i)),
|
||||||
uintptr(startSlot), uintptr(numViews), uintptr(unsafe.Pointer(pViews)),
|
uintptr(startSlot), uintptr(len(pViews)), uintptr(unsafe.Pointer(&pViews[0])),
|
||||||
0, 0)
|
0, 0)
|
||||||
runtime.KeepAlive(pViews)
|
runtime.KeepAlive(pViews)
|
||||||
}
|
}
|
||||||
@ -1877,21 +1877,21 @@ func (i *_ID3D12GraphicsCommandList) Reset(pAllocator *_ID3D12CommandAllocator,
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *_ID3D12GraphicsCommandList) ResourceBarrier(numBarriers uint32, pBarriers *_D3D12_RESOURCE_BARRIER_Transition) {
|
func (i *_ID3D12GraphicsCommandList) ResourceBarrier(pBarriers []_D3D12_RESOURCE_BARRIER_Transition) {
|
||||||
syscall.Syscall(i.vtbl.ResourceBarrier, 3, uintptr(unsafe.Pointer(i)),
|
syscall.Syscall(i.vtbl.ResourceBarrier, 3, uintptr(unsafe.Pointer(i)),
|
||||||
uintptr(numBarriers), uintptr(unsafe.Pointer(pBarriers)))
|
uintptr(len(pBarriers)), uintptr(unsafe.Pointer(&pBarriers[0])))
|
||||||
runtime.KeepAlive(pBarriers)
|
runtime.KeepAlive(pBarriers)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *_ID3D12GraphicsCommandList) RSSetViewports(numViewports uint32, pViewports *_D3D12_VIEWPORT) {
|
func (i *_ID3D12GraphicsCommandList) RSSetViewports(pViewports []_D3D12_VIEWPORT) {
|
||||||
syscall.Syscall(i.vtbl.RSSetViewports, 3, uintptr(unsafe.Pointer(i)),
|
syscall.Syscall(i.vtbl.RSSetViewports, 3, uintptr(unsafe.Pointer(i)),
|
||||||
uintptr(numViewports), uintptr(unsafe.Pointer(pViewports)))
|
uintptr(len(pViewports)), uintptr(unsafe.Pointer(&pViewports[0])))
|
||||||
runtime.KeepAlive(pViewports)
|
runtime.KeepAlive(pViewports)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *_ID3D12GraphicsCommandList) RSSetScissorRects(numRects uint32, pRects *_D3D12_RECT) {
|
func (i *_ID3D12GraphicsCommandList) RSSetScissorRects(pRects []_D3D12_RECT) {
|
||||||
syscall.Syscall(i.vtbl.RSSetScissorRects, 3, uintptr(unsafe.Pointer(i)),
|
syscall.Syscall(i.vtbl.RSSetScissorRects, 3, uintptr(unsafe.Pointer(i)),
|
||||||
uintptr(numRects), uintptr(unsafe.Pointer(pRects)))
|
uintptr(len(pRects)), uintptr(unsafe.Pointer(&pRects[0])))
|
||||||
runtime.KeepAlive(pRects)
|
runtime.KeepAlive(pRects)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1115,26 +1115,32 @@ func (g *Graphics) DrawTriangles(dstID graphicsdriver.ImageID, srcs [graphics.Sh
|
|||||||
}
|
}
|
||||||
|
|
||||||
w, h := dst.internalSize()
|
w, h := dst.internalSize()
|
||||||
g.drawCommandList.RSSetViewports(1, &_D3D12_VIEWPORT{
|
g.drawCommandList.RSSetViewports([]_D3D12_VIEWPORT{
|
||||||
|
{
|
||||||
TopLeftX: 0,
|
TopLeftX: 0,
|
||||||
TopLeftY: 0,
|
TopLeftY: 0,
|
||||||
Width: float32(w),
|
Width: float32(w),
|
||||||
Height: float32(h),
|
Height: float32(h),
|
||||||
MinDepth: _D3D12_MIN_DEPTH,
|
MinDepth: _D3D12_MIN_DEPTH,
|
||||||
MaxDepth: _D3D12_MAX_DEPTH,
|
MaxDepth: _D3D12_MAX_DEPTH,
|
||||||
|
},
|
||||||
})
|
})
|
||||||
g.drawCommandList.RSSetScissorRects(1, &_D3D12_RECT{
|
g.drawCommandList.RSSetScissorRects([]_D3D12_RECT{
|
||||||
|
{
|
||||||
left: int32(dstRegion.X),
|
left: int32(dstRegion.X),
|
||||||
top: int32(dstRegion.Y),
|
top: int32(dstRegion.Y),
|
||||||
right: int32(dstRegion.X + dstRegion.Width),
|
right: int32(dstRegion.X + dstRegion.Width),
|
||||||
bottom: int32(dstRegion.Y + dstRegion.Height),
|
bottom: int32(dstRegion.Y + dstRegion.Height),
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
g.drawCommandList.IASetPrimitiveTopology(_D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST)
|
g.drawCommandList.IASetPrimitiveTopology(_D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST)
|
||||||
g.drawCommandList.IASetVertexBuffers(0, 1, &_D3D12_VERTEX_BUFFER_VIEW{
|
g.drawCommandList.IASetVertexBuffers(0, []_D3D12_VERTEX_BUFFER_VIEW{
|
||||||
|
{
|
||||||
BufferLocation: g.vertices[g.frameIndex][len(g.vertices[g.frameIndex])-1].GetGPUVirtualAddress(),
|
BufferLocation: g.vertices[g.frameIndex][len(g.vertices[g.frameIndex])-1].GetGPUVirtualAddress(),
|
||||||
SizeInBytes: graphics.IndicesNum * graphics.VertexFloatNum * uint32(unsafe.Sizeof(float32(0))),
|
SizeInBytes: graphics.IndicesNum * graphics.VertexFloatNum * uint32(unsafe.Sizeof(float32(0))),
|
||||||
StrideInBytes: graphics.VertexFloatNum * uint32(unsafe.Sizeof(float32(0))),
|
StrideInBytes: graphics.VertexFloatNum * uint32(unsafe.Sizeof(float32(0))),
|
||||||
|
},
|
||||||
})
|
})
|
||||||
g.drawCommandList.IASetIndexBuffer(&_D3D12_INDEX_BUFFER_VIEW{
|
g.drawCommandList.IASetIndexBuffer(&_D3D12_INDEX_BUFFER_VIEW{
|
||||||
BufferLocation: g.indices[g.frameIndex][len(g.indices[g.frameIndex])-1].GetGPUVirtualAddress(),
|
BufferLocation: g.indices[g.frameIndex][len(g.indices[g.frameIndex])-1].GetGPUVirtualAddress(),
|
||||||
@ -1449,7 +1455,8 @@ func (i *Image) transiteState(commandList *_ID3D12GraphicsCommandList, newState
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
commandList.ResourceBarrier(1, &_D3D12_RESOURCE_BARRIER_Transition{
|
commandList.ResourceBarrier([]_D3D12_RESOURCE_BARRIER_Transition{
|
||||||
|
{
|
||||||
Type: _D3D12_RESOURCE_BARRIER_TYPE_TRANSITION,
|
Type: _D3D12_RESOURCE_BARRIER_TYPE_TRANSITION,
|
||||||
Flags: _D3D12_RESOURCE_BARRIER_FLAG_NONE,
|
Flags: _D3D12_RESOURCE_BARRIER_FLAG_NONE,
|
||||||
Transition: _D3D12_RESOURCE_TRANSITION_BARRIER{
|
Transition: _D3D12_RESOURCE_TRANSITION_BARRIER{
|
||||||
@ -1458,6 +1465,7 @@ func (i *Image) transiteState(commandList *_ID3D12GraphicsCommandList, newState
|
|||||||
StateBefore: i.state,
|
StateBefore: i.state,
|
||||||
StateAfter: newState,
|
StateAfter: newState,
|
||||||
},
|
},
|
||||||
|
},
|
||||||
})
|
})
|
||||||
i.state = newState
|
i.state = newState
|
||||||
}
|
}
|
||||||
@ -1501,7 +1509,7 @@ func (i *Image) setAsRenderTarget(device *_ID3D12Device, useStencil bool) error
|
|||||||
}
|
}
|
||||||
dsv = &v
|
dsv = &v
|
||||||
|
|
||||||
i.graphics.drawCommandList.ClearDepthStencilView(v, _D3D12_CLEAR_FLAG_STENCIL, 0, 0, 0, nil)
|
i.graphics.drawCommandList.ClearDepthStencilView(v, _D3D12_CLEAR_FLAG_STENCIL, 0, 0, nil)
|
||||||
i.graphics.drawCommandList.OMSetStencilRef(0)
|
i.graphics.drawCommandList.OMSetStencilRef(0)
|
||||||
}
|
}
|
||||||
i.graphics.drawCommandList.OMSetRenderTargets(1, &rtv, false, dsv) // TODO: Pass depth-stencil here!
|
i.graphics.drawCommandList.OMSetRenderTargets(1, &rtv, false, dsv) // TODO: Pass depth-stencil here!
|
||||||
|
Loading…
Reference in New Issue
Block a user