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;