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