Rico Schüller : d3dx9: Handle ST_FXLC in d3dx9_parse_resource().
Alexandre Julliard
julliard at winehq.org
Fri Jul 1 14:11:04 CDT 2011
Module: wine
Branch: master
Commit: 05eef50e22a45c985e85cb6ebbebfdc68e3b8718
URL: http://source.winehq.org/git/wine.git/?a=commit;h=05eef50e22a45c985e85cb6ebbebfdc68e3b8718
Author: Rico Schüller <kgbricola at web.de>
Date: Fri Jul 1 13:50:03 2011 +0200
d3dx9: Handle ST_FXLC in d3dx9_parse_resource().
---
dlls/d3dx9_36/effect.c | 31 +++++++++++++++++++++++++++++++
1 files changed, 31 insertions(+), 0 deletions(-)
diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c
index 4253863..5d76917 100644
--- a/dlls/d3dx9_36/effect.c
+++ b/dlls/d3dx9_36/effect.c
@@ -88,6 +88,7 @@ enum SHADER_CONSTANT_TYPE
enum STATE_TYPE
{
ST_CONSTANT,
+ ST_FXLC,
};
struct d3dx_parameter
@@ -4021,6 +4022,28 @@ static HRESULT d3dx9_parse_name(char **name, const char *ptr)
return D3D_OK;
}
+static HRESULT d3dx9_copy_data(char **str, const char **ptr)
+{
+ DWORD size;
+
+ read_dword(ptr, &size);
+ TRACE("Data size: %#x\n", size);
+
+ *str = HeapAlloc(GetProcessHeap(), 0, size);
+ if (!*str)
+ {
+ ERR("Failed to allocate name memory.\n");
+ return E_OUTOFMEMORY;
+ }
+
+ TRACE("Data: %s.\n", debugstr_an(*ptr, size));
+ memcpy(*str, *ptr, size);
+
+ *ptr += ((size + 3) & ~3);
+
+ return D3D_OK;
+}
+
static HRESULT d3dx9_parse_data(struct d3dx_parameter *param, const char **ptr, LPDIRECT3DDEVICE9 device)
{
DWORD size;
@@ -4795,6 +4818,14 @@ static HRESULT d3dx9_parse_resource(struct ID3DXBaseEffectImpl *base, const char
hr = d3dx9_parse_data(param, ptr, base->effect->device);
break;
+ case D3DXPT_BOOL:
+ case D3DXPT_INT:
+ case D3DXPT_FLOAT:
+ case D3DXPT_STRING:
+ state->type = ST_FXLC;
+ hr = d3dx9_copy_data(param->data, ptr);
+ break;
+
default:
FIXME("Unhandled type %s\n", debug_d3dxparameter_type(param->type));
hr=E_FAIL;
More information about the wine-cvs
mailing list