mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 15:58:05 +02:00
d3d12: implement pb_fence vtbl for cache/slab reuse
Assisted-by: Claude Opus 4.7 Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41322>
This commit is contained in:
parent
b8f2b968de
commit
18012b69ab
1 changed files with 17 additions and 3 deletions
|
|
@ -23,6 +23,7 @@
|
|||
|
||||
#include "d3d12_bufmgr.h"
|
||||
#include "d3d12_context.h"
|
||||
#include "d3d12_fence.h"
|
||||
#include "d3d12_format.h"
|
||||
#include "d3d12_screen.h"
|
||||
|
||||
|
|
@ -366,8 +367,18 @@ d3d12_buffer_validate(struct pb_buffer *pbuf,
|
|||
|
||||
static void
|
||||
d3d12_buffer_fence(struct pb_buffer *pbuf,
|
||||
struct pipe_fence_handle *fence )
|
||||
struct pipe_fence_handle *fence)
|
||||
{
|
||||
if (!fence)
|
||||
return;
|
||||
struct d3d12_buffer *buf = d3d12_buffer(pbuf);
|
||||
struct d3d12_fence *f = d3d12_fence(fence);
|
||||
uint64_t offset;
|
||||
struct d3d12_bo *base = d3d12_bo_get_base(buf->bo, &offset);
|
||||
if (f->cmdqueue_fence != base->screen->fence)
|
||||
return;
|
||||
if (f->value > base->last_used_fence)
|
||||
base->last_used_fence = f->value;
|
||||
}
|
||||
|
||||
const struct pb_vtbl d3d12_buffer_vtbl = {
|
||||
|
|
@ -433,8 +444,11 @@ d3d12_bufmgr_destroy(struct pb_manager *_mgr)
|
|||
static bool
|
||||
d3d12_bufmgr_is_buffer_busy(struct pb_manager *_mgr, struct pb_buffer *_buf)
|
||||
{
|
||||
/* We're only asked this on buffers that are known not busy */
|
||||
return false;
|
||||
struct d3d12_bufmgr *mgr = d3d12_bufmgr(_mgr);
|
||||
struct d3d12_buffer *buf = d3d12_buffer(_buf);
|
||||
uint64_t offset;
|
||||
struct d3d12_bo *base = d3d12_bo_get_base(buf->bo, &offset);
|
||||
return base->last_used_fence > mgr->screen->fence->GetCompletedValue();
|
||||
}
|
||||
|
||||
struct pb_manager *
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue