st/nine: Add new helper for object creation with bind
authorAxel Davy <davyaxel0@gmail.com>
Sun, 9 Sep 2018 10:39:10 +0000 (12:39 +0200)
committerAxel Davy <davyaxel0@gmail.com>
Tue, 25 Sep 2018 20:05:24 +0000 (22:05 +0200)
Add a new helper to create objects starting with a bind
count instead of a ref count.

Signed-off-by: Axel Davy <davyaxel0@gmail.com>
src/gallium/state_trackers/nine/nine_helpers.h

index a0c55bd9eed1ac752fe4b4e497ab85865826b445..c14dd1c04fc78da760bd73a215cfb4f064573e4f 100644 (file)
@@ -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; \