From e83b15cba0ef2712c51ee7b5049e364853ff3707 Mon Sep 17 00:00:00 2001 From: Axel Davy Date: Sun, 9 Sep 2018 12:39:10 +0200 Subject: st/nine: Add new helper for object creation with bind Add a new helper to create objects starting with a bind count instead of a ref count. Signed-off-by: Axel Davy --- src/gallium/state_trackers/nine/nine_helpers.h | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'src') diff --git a/src/gallium/state_trackers/nine/nine_helpers.h b/src/gallium/state_trackers/nine/nine_helpers.h index a0c55bd9eed..c14dd1c04fc 100644 --- a/src/gallium/state_trackers/nine/nine_helpers.h +++ b/src/gallium/state_trackers/nine/nine_helpers.h @@ -99,6 +99,32 @@ static inline void _nine_bind(void **dst, void *obj) } \ return D3D_OK +#define NINE_DEVICE_CHILD_BIND_NEW(nine, out, dev, ...) \ + { \ + struct NineUnknownParams __params; \ + struct Nine##nine *__data; \ + \ + __data = CALLOC_STRUCT(Nine##nine); \ + if (!__data) { return E_OUTOFMEMORY; } \ + \ + __params.vtable = ((dev)->params.BehaviorFlags & D3DCREATE_MULTITHREADED) ? &Lock##nine##_vtable : &Nine##nine##_vtable; \ + __params.guids = Nine##nine##_IIDs; \ + __params.dtor = (void *)Nine##nine##_dtor; \ + __params.container = NULL; \ + __params.device = dev; \ + __params.start_with_bind_not_ref = true; \ + { \ + HRESULT __hr = Nine##nine##_ctor(__data, &__params, ## __VA_ARGS__); \ + if (FAILED(__hr)) { \ + Nine##nine##_dtor(__data); \ + return __hr; \ + } \ + } \ + \ + *(out) = __data; \ + } \ + return D3D_OK + #define NINE_NEW(nine, out, lock, ...) \ { \ struct NineUnknownParams __params; \ -- cgit v1.2.3