ReactOS 0.4.17-dev-934-g091855f
blob.c File Reference
#include "vkd3d.h"
#include "vkd3d_blob.h"
#include "vkd3d_memory.h"
#include "d3d12shader.h"
Include dependency graph for blob.c:

Go to the source code of this file.

Classes

struct  vkd3d_blob
 

Macros

#define WIDL_C_INLINE_WRAPPERS
 
#define COBJMACROS
 
#define CONST_VTABLE
 

Functions

static struct vkd3d_blob * impl_from_ID3DBlob (ID3DBlob *iface)
 
static HRESULT STDMETHODCALLTYPE vkd3d_blob_QueryInterface (ID3DBlob *iface, REFIID riid, void **object)
 
static ULONG STDMETHODCALLTYPE vkd3d_blob_AddRef (ID3DBlob *iface)
 
static ULONG STDMETHODCALLTYPE vkd3d_blob_Release (ID3DBlob *iface)
 
static void *STDMETHODCALLTYPE vkd3d_blob_GetBufferPointer (ID3DBlob *iface)
 
static SIZE_T STDMETHODCALLTYPE vkd3d_blob_GetBufferSize (ID3DBlob *iface)
 
static void vkd3d_blob_init (struct vkd3d_blob *blob, void *buffer, SIZE_T size)
 
HRESULT vkd3d_blob_create (void *buffer, SIZE_T size, ID3D10Blob **blob)
 

Variables

static const struct ID3D10BlobVtbl vkd3d_blob_vtbl
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 22 of file blob.c.

◆ CONST_VTABLE

#define CONST_VTABLE

Definition at line 23 of file blob.c.

◆ WIDL_C_INLINE_WRAPPERS

#define WIDL_C_INLINE_WRAPPERS

Definition at line 20 of file blob.c.

Function Documentation

◆ impl_from_ID3DBlob()

static struct vkd3d_blob * impl_from_ID3DBlob ( ID3DBlob *  iface)
static

Definition at line 38 of file blob.c.

39{
40 return CONTAINING_RECORD(iface, struct vkd3d_blob, ID3DBlob_iface);
41}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

◆ vkd3d_blob_AddRef()

static ULONG STDMETHODCALLTYPE vkd3d_blob_AddRef ( ID3DBlob *  iface)
static

Definition at line 61 of file blob.c.

62{
63 struct vkd3d_blob *blob = impl_from_ID3DBlob(iface);
64 unsigned int refcount = vkd3d_atomic_increment_u32(&blob->refcount);
65
66 TRACE("%p increasing refcount to %u.\n", blob, refcount);
67
68 return refcount;
69}
static struct d3dcompiler_blob * impl_from_ID3DBlob(ID3DBlob *iface)
Definition: blob.c:35
#define TRACE(s)
Definition: solgame.cpp:4
Definition: image.c:229
unsigned int refcount
Definition: blob.c:32
static uint32_t vkd3d_atomic_increment_u32(uint32_t volatile *x)
Definition: vkd3d_common.h:482

◆ vkd3d_blob_create()

HRESULT vkd3d_blob_create ( void *  buffer,
SIZE_T  size,
ID3D10Blob **  blob 
)

Definition at line 126 of file blob.c.

127{
128 struct vkd3d_blob *object;
129
130 if (!(object = vkd3d_malloc(sizeof(*object))))
131 return E_OUTOFMEMORY;
132
133 vkd3d_blob_init(object, buffer, size);
134
135 TRACE("Created blob object %p.\n", object);
136
137 *blob = &object->ID3DBlob_iface;
138
139 return S_OK;
140}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
GLuint buffer
Definition: glext.h:5915
GLsizeiptr size
Definition: glext.h:5919
#define S_OK
Definition: intsafe.h:52
static void vkd3d_blob_init(struct vkd3d_blob *blob, void *buffer, SIZE_T size)
Definition: blob.c:117
static void * vkd3d_malloc(size_t size)
Definition: vkd3d_memory.h:28

Referenced by vkd3d_serialize_root_signature(), and vkd3d_serialize_versioned_root_signature().

◆ vkd3d_blob_GetBufferPointer()

static void *STDMETHODCALLTYPE vkd3d_blob_GetBufferPointer ( ID3DBlob *  iface)
static

Definition at line 88 of file blob.c.

89{
90 struct vkd3d_blob *blob = impl_from_ID3DBlob(iface);
91
92 TRACE("iface %p.\n", iface);
93
94 return blob->buffer;
95}

◆ vkd3d_blob_GetBufferSize()

static SIZE_T STDMETHODCALLTYPE vkd3d_blob_GetBufferSize ( ID3DBlob *  iface)
static

Definition at line 97 of file blob.c.

98{
99 struct vkd3d_blob *blob = impl_from_ID3DBlob(iface);
100
101 TRACE("iface %p.\n", iface);
102
103 return blob->size;
104}

◆ vkd3d_blob_init()

static void vkd3d_blob_init ( struct vkd3d_blob *  blob,
void *  buffer,
SIZE_T  size 
)
static

Definition at line 117 of file blob.c.

118{
119 blob->ID3DBlob_iface.lpVtbl = &vkd3d_blob_vtbl;
120 blob->refcount = 1;
121
122 blob->buffer = buffer;
123 blob->size = size;
124}
static const struct ID3D10BlobVtbl vkd3d_blob_vtbl
Definition: blob.c:106

Referenced by vkd3d_blob_create().

◆ vkd3d_blob_QueryInterface()

static HRESULT STDMETHODCALLTYPE vkd3d_blob_QueryInterface ( ID3DBlob *  iface,
REFIID  riid,
void **  object 
)
static

Definition at line 43 of file blob.c.

44{
45 TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), object);
46
47 if (IsEqualGUID(riid, &IID_ID3DBlob)
49 {
50 ID3D10Blob_AddRef(iface);
51 *object = iface;
52 return S_OK;
53 }
54
55 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
56
57 *object = NULL;
58 return E_NOINTERFACE;
59}
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
#define NULL
Definition: types.h:112
REFIID riid
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ vkd3d_blob_Release()

static ULONG STDMETHODCALLTYPE vkd3d_blob_Release ( ID3DBlob *  iface)
static

Definition at line 71 of file blob.c.

72{
73 struct vkd3d_blob *blob = impl_from_ID3DBlob(iface);
74 unsigned int refcount = vkd3d_atomic_decrement_u32(&blob->refcount);
75
76 TRACE("%p decreasing refcount to %u.\n", blob, refcount);
77
78 if (!refcount)
79 {
80 vkd3d_free(blob->buffer);
81
83 }
84
85 return refcount;
86}
static uint32_t vkd3d_atomic_decrement_u32(uint32_t volatile *x)
Definition: vkd3d_common.h:477
static void vkd3d_free(void *ptr)
Definition: vkd3d_memory.h:52

Variable Documentation

◆ vkd3d_blob_vtbl

const struct ID3D10BlobVtbl vkd3d_blob_vtbl
static
Initial value:
=
{
}
static ULONG STDMETHODCALLTYPE vkd3d_blob_Release(ID3DBlob *iface)
Definition: blob.c:71
static SIZE_T STDMETHODCALLTYPE vkd3d_blob_GetBufferSize(ID3DBlob *iface)
Definition: blob.c:97
static void *STDMETHODCALLTYPE vkd3d_blob_GetBufferPointer(ID3DBlob *iface)
Definition: blob.c:88
static HRESULT STDMETHODCALLTYPE vkd3d_blob_QueryInterface(ID3DBlob *iface, REFIID riid, void **object)
Definition: blob.c:43
static ULONG STDMETHODCALLTYPE vkd3d_blob_AddRef(ID3DBlob *iface)
Definition: blob.c:61

Definition at line 106 of file blob.c.

Referenced by vkd3d_blob_init().