mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-03 14:28:48 +00:00
wined3d: Move IUnknown functions to IWineD3DBaseShader.
This commit is contained in:
parent
6cecaa9852
commit
bd97580683
|
@ -1062,7 +1062,7 @@ void shader_trace_init(
|
|||
}
|
||||
}
|
||||
|
||||
void shader_delete_constant_list(
|
||||
static void shader_delete_constant_list(
|
||||
struct list* clist) {
|
||||
|
||||
struct list *ptr;
|
||||
|
@ -1087,3 +1087,41 @@ const shader_backend_t none_shader_backend = {
|
|||
&shader_none_load_constants,
|
||||
&shader_none_cleanup
|
||||
};
|
||||
|
||||
/* *******************************************
|
||||
IWineD3DPixelShader IUnknown parts follow
|
||||
******************************************* */
|
||||
HRESULT WINAPI IWineD3DBaseShaderImpl_QueryInterface(IWineD3DBaseShader *iface, REFIID riid, LPVOID *ppobj)
|
||||
{
|
||||
IWineD3DBaseShaderImpl *This = (IWineD3DBaseShaderImpl *)iface;
|
||||
TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(riid),ppobj);
|
||||
if (IsEqualGUID(riid, &IID_IUnknown)
|
||||
|| IsEqualGUID(riid, &IID_IWineD3DBase)
|
||||
|| IsEqualGUID(riid, &IID_IWineD3DBaseShader)
|
||||
|| IsEqualGUID(riid, &IID_IWineD3DPixelShader)) {
|
||||
IUnknown_AddRef(iface);
|
||||
*ppobj = This;
|
||||
return S_OK;
|
||||
}
|
||||
*ppobj = NULL;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
ULONG WINAPI IWineD3DBaseShaderImpl_AddRef(IWineD3DBaseShader *iface) {
|
||||
IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)iface;
|
||||
TRACE("(%p) : AddRef increasing from %d\n", This, This->baseShader.ref);
|
||||
return InterlockedIncrement(&This->baseShader.ref);
|
||||
}
|
||||
|
||||
ULONG WINAPI IWineD3DBaseShaderImpl_Release(IWineD3DBaseShader *iface) {
|
||||
IWineD3DBaseShaderImpl *This = (IWineD3DBaseShaderImpl *)iface;
|
||||
ULONG ref;
|
||||
TRACE("(%p) : Releasing from %d\n", This, This->baseShader.ref);
|
||||
ref = InterlockedDecrement(&This->baseShader.ref);
|
||||
if (ref == 0) {
|
||||
shader_delete_constant_list(&This->baseShader.constantsF);
|
||||
shader_delete_constant_list(&This->baseShader.constantsB);
|
||||
shader_delete_constant_list(&This->baseShader.constantsI);
|
||||
}
|
||||
return ref;
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@ static void WINAPI IWineD3DDeviceImpl_AddResource(IWineD3DDevice *iface, IWineD3
|
|||
object=HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IWineD3D##type##Impl)); \
|
||||
D3DMEMCHECK(object, pp##type); \
|
||||
object->lpVtbl = &IWineD3D##type##_Vtbl; \
|
||||
object->parent = parent; \
|
||||
object->ref = 1; \
|
||||
object->parent = parent; \
|
||||
object->baseShader.ref = 1; \
|
||||
object->baseShader.device = (IWineD3DDevice*) This; \
|
||||
list_init(&object->baseShader.linked_programs); \
|
||||
*pp##type = (IWineD3D##type *) object; \
|
||||
|
|
|
@ -42,29 +42,13 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader);
|
|||
#endif
|
||||
|
||||
#define GLNAME_REQUIRE_GLSL ((const char *)1)
|
||||
/* *******************************************
|
||||
IWineD3DPixelShader IUnknown parts follow
|
||||
******************************************* */
|
||||
static HRESULT WINAPI IWineD3DPixelShaderImpl_QueryInterface(IWineD3DPixelShader *iface, REFIID riid, LPVOID *ppobj)
|
||||
{
|
||||
IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)iface;
|
||||
TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(riid),ppobj);
|
||||
if (IsEqualGUID(riid, &IID_IUnknown)
|
||||
|| IsEqualGUID(riid, &IID_IWineD3DBase)
|
||||
|| IsEqualGUID(riid, &IID_IWineD3DBaseShader)
|
||||
|| IsEqualGUID(riid, &IID_IWineD3DPixelShader)) {
|
||||
IUnknown_AddRef(iface);
|
||||
*ppobj = This;
|
||||
return S_OK;
|
||||
}
|
||||
*ppobj = NULL;
|
||||
return E_NOINTERFACE;
|
||||
|
||||
static HRESULT WINAPI IWineD3DPixelShaderImpl_QueryInterface(IWineD3DPixelShader *iface, REFIID riid, LPVOID *ppobj) {
|
||||
return IWineD3DBaseShaderImpl_QueryInterface((IWineD3DBaseShader *) iface, riid, ppobj);
|
||||
}
|
||||
|
||||
static ULONG WINAPI IWineD3DPixelShaderImpl_AddRef(IWineD3DPixelShader *iface) {
|
||||
IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)iface;
|
||||
TRACE("(%p) : AddRef increasing from %d\n", This, This->ref);
|
||||
return InterlockedIncrement(&This->ref);
|
||||
return IWineD3DBaseShaderImpl_AddRef((IWineD3DBaseShader *) iface);
|
||||
}
|
||||
|
||||
static void destroy_glsl_pshader(IWineD3DPixelShaderImpl *This) {
|
||||
|
@ -86,17 +70,15 @@ static void destroy_glsl_pshader(IWineD3DPixelShaderImpl *This) {
|
|||
static ULONG WINAPI IWineD3DPixelShaderImpl_Release(IWineD3DPixelShader *iface) {
|
||||
IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)iface;
|
||||
ULONG ref;
|
||||
TRACE("(%p) : Releasing from %d\n", This, This->ref);
|
||||
ref = InterlockedDecrement(&This->ref);
|
||||
if (ref == 0) {
|
||||
ref = IWineD3DBaseShaderImpl_Release((IWineD3DBaseShader *) iface);
|
||||
|
||||
if(ref == 0) {
|
||||
if (This->baseShader.shader_mode == SHADER_GLSL && This->baseShader.prgId != 0) {
|
||||
destroy_glsl_pshader(This);
|
||||
}
|
||||
shader_delete_constant_list(&This->baseShader.constantsF);
|
||||
shader_delete_constant_list(&This->baseShader.constantsB);
|
||||
shader_delete_constant_list(&This->baseShader.constantsI);
|
||||
HeapFree(GetProcessHeap(), 0, This);
|
||||
}
|
||||
|
||||
return ref;
|
||||
}
|
||||
|
||||
|
|
|
@ -437,33 +437,19 @@ static VOID IWineD3DVertexShaderImpl_GenerateShader(
|
|||
/* *******************************************
|
||||
IWineD3DVertexShader IUnknown parts follow
|
||||
******************************************* */
|
||||
static HRESULT WINAPI IWineD3DVertexShaderImpl_QueryInterface(IWineD3DVertexShader *iface, REFIID riid, LPVOID *ppobj)
|
||||
{
|
||||
IWineD3DVertexShaderImpl *This = (IWineD3DVertexShaderImpl *)iface;
|
||||
TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(riid),ppobj);
|
||||
if (IsEqualGUID(riid, &IID_IUnknown)
|
||||
|| IsEqualGUID(riid, &IID_IWineD3DBase)
|
||||
|| IsEqualGUID(riid, &IID_IWineD3DBaseShader)
|
||||
|| IsEqualGUID(riid, &IID_IWineD3DVertexShader)) {
|
||||
IUnknown_AddRef(iface);
|
||||
*ppobj = This;
|
||||
return S_OK;
|
||||
}
|
||||
*ppobj = NULL;
|
||||
return E_NOINTERFACE;
|
||||
static HRESULT WINAPI IWineD3DVertexShaderImpl_QueryInterface(IWineD3DVertexShader *iface, REFIID riid, LPVOID *ppobj) {
|
||||
return IWineD3DBaseShaderImpl_QueryInterface((IWineD3DBaseShader *) iface, riid, ppobj);
|
||||
}
|
||||
|
||||
static ULONG WINAPI IWineD3DVertexShaderImpl_AddRef(IWineD3DVertexShader *iface) {
|
||||
IWineD3DVertexShaderImpl *This = (IWineD3DVertexShaderImpl *)iface;
|
||||
TRACE("(%p) : AddRef increasing from %d\n", This, This->ref);
|
||||
return InterlockedIncrement(&This->ref);
|
||||
static ULONG WINAPI IWineD3DVertexShaderImpl_AddRef(IWineD3DVertexShader *iface) {
|
||||
return IWineD3DBaseShaderImpl_AddRef((IWineD3DBaseShader *) iface);
|
||||
}
|
||||
|
||||
static ULONG WINAPI IWineD3DVertexShaderImpl_Release(IWineD3DVertexShader *iface) {
|
||||
IWineD3DVertexShaderImpl *This = (IWineD3DVertexShaderImpl *)iface;
|
||||
ULONG ref;
|
||||
TRACE("(%p) : Releasing from %d\n", This, This->ref);
|
||||
ref = InterlockedDecrement(&This->ref);
|
||||
ref = IWineD3DBaseShaderImpl_Release((IWineD3DBaseShader *) iface);
|
||||
|
||||
if (ref == 0) {
|
||||
if (This->baseShader.shader_mode == SHADER_GLSL && This->baseShader.prgId != 0) {
|
||||
struct list *linked_programs = &This->baseShader.linked_programs;
|
||||
|
@ -480,11 +466,7 @@ static ULONG WINAPI IWineD3DVertexShaderImpl_Release(IWineD3DVertexShader *iface
|
|||
GL_EXTCALL(glDeleteObjectARB(This->baseShader.prgId));
|
||||
checkGLcall("glDeleteObjectARB");
|
||||
}
|
||||
shader_delete_constant_list(&This->baseShader.constantsF);
|
||||
shader_delete_constant_list(&This->baseShader.constantsB);
|
||||
shader_delete_constant_list(&This->baseShader.constantsI);
|
||||
HeapFree(GetProcessHeap(), 0, This);
|
||||
|
||||
}
|
||||
return ref;
|
||||
}
|
||||
|
|
|
@ -1748,9 +1748,6 @@ extern const SHADER_OPCODE* shader_get_opcode(
|
|||
IWineD3DBaseShader *iface,
|
||||
const DWORD code);
|
||||
|
||||
extern void shader_delete_constant_list(
|
||||
struct list* clist);
|
||||
|
||||
void delete_glsl_program_entry(IWineD3DDevice *iface, struct glsl_shader_prog_link *entry);
|
||||
|
||||
/* Vertex shader utility functions */
|
||||
|
@ -1882,6 +1879,7 @@ extern void pshader_glsl_input_pack(
|
|||
*/
|
||||
typedef struct IWineD3DBaseShaderClass
|
||||
{
|
||||
LONG ref;
|
||||
DWORD hex_version;
|
||||
SHADER_LIMITS limits;
|
||||
SHADER_PARSE_STATE parse_state;
|
||||
|
@ -1924,12 +1922,15 @@ typedef struct IWineD3DBaseShaderClass
|
|||
typedef struct IWineD3DBaseShaderImpl {
|
||||
/* IUnknown */
|
||||
const IWineD3DBaseShaderVtbl *lpVtbl;
|
||||
LONG ref;
|
||||
|
||||
/* IWineD3DBaseShader */
|
||||
IWineD3DBaseShaderClass baseShader;
|
||||
} IWineD3DBaseShaderImpl;
|
||||
|
||||
HRESULT WINAPI IWineD3DBaseShaderImpl_QueryInterface(IWineD3DBaseShader *iface, REFIID riid, LPVOID *ppobj);
|
||||
ULONG WINAPI IWineD3DBaseShaderImpl_AddRef(IWineD3DBaseShader *iface);
|
||||
ULONG WINAPI IWineD3DBaseShaderImpl_Release(IWineD3DBaseShader *iface);
|
||||
|
||||
extern HRESULT shader_get_registers_used(
|
||||
IWineD3DBaseShader *iface,
|
||||
shader_reg_maps* reg_maps,
|
||||
|
@ -2038,7 +2039,6 @@ static inline BOOL shader_is_scalar(DWORD param) {
|
|||
typedef struct IWineD3DVertexShaderImpl {
|
||||
/* IUnknown parts*/
|
||||
const IWineD3DVertexShaderVtbl *lpVtbl;
|
||||
LONG ref; /* Note: Ref counting not required */
|
||||
|
||||
/* IWineD3DBaseShader */
|
||||
IWineD3DBaseShaderClass baseShader;
|
||||
|
@ -2079,7 +2079,6 @@ enum vertexprocessing_mode {
|
|||
typedef struct IWineD3DPixelShaderImpl {
|
||||
/* IUnknown parts */
|
||||
const IWineD3DPixelShaderVtbl *lpVtbl;
|
||||
LONG ref; /* Note: Ref counting not required */
|
||||
|
||||
/* IWineD3DBaseShader */
|
||||
IWineD3DBaseShaderClass baseShader;
|
||||
|
|
Loading…
Reference in a new issue