d3dx9: Handle ST_FXLC in d3dx9_parse_resource().
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 STATE_TYPE
{
ST_CONSTANT,
+ ST_FXLC,
};
struct d3dx_parameter
@@ -4021,6 +4022,28 @@
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 @@
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;