[PATCH 2/3] d3d10/effect: Implement GetString().
Nikolay Sivov
nsivov at codeweavers.com
Mon Aug 9 08:39:48 CDT 2021
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/d3d10/effect.c | 19 +++++++++++++++++--
dlls/d3d10/tests/effect.c | 24 +++++++++++++++---------
2 files changed, 32 insertions(+), 11 deletions(-)
diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c
index 18aed7b52de..552a4a664fb 100644
--- a/dlls/d3d10/effect.c
+++ b/dlls/d3d10/effect.c
@@ -5791,6 +5791,11 @@ static const struct ID3D10EffectMatrixVariableVtbl d3d10_effect_matrix_variable_
/* ID3D10EffectVariable methods */
+static inline struct d3d10_effect_variable *impl_from_ID3D10EffectStringVariable(ID3D10EffectStringVariable *iface)
+{
+ return CONTAINING_RECORD(iface, struct d3d10_effect_variable, ID3D10EffectVariable_iface);
+}
+
static BOOL STDMETHODCALLTYPE d3d10_effect_string_variable_IsValid(ID3D10EffectStringVariable *iface)
{
TRACE("iface %p\n", iface);
@@ -5947,9 +5952,19 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_string_variable_GetRawValue(ID3D10
static HRESULT STDMETHODCALLTYPE d3d10_effect_string_variable_GetString(ID3D10EffectStringVariable *iface,
const char **str)
{
- FIXME("iface %p, str %p stub!\n", iface, str);
+ struct d3d10_effect_variable *var = impl_from_ID3D10EffectStringVariable(iface);
- return E_NOTIMPL;
+ TRACE("iface %p, str %p.\n", iface, str);
+
+ if (!var->value)
+ return E_FAIL;
+
+ if (!str)
+ return E_INVALIDARG;
+
+ *str = var->value;
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_string_variable_GetStringArray(ID3D10EffectStringVariable *iface,
diff --git a/dlls/d3d10/tests/effect.c b/dlls/d3d10/tests/effect.c
index 871bf78cc27..cae16491993 100644
--- a/dlls/d3d10/tests/effect.c
+++ b/dlls/d3d10/tests/effect.c
@@ -1423,22 +1423,28 @@ static void test_effect_variable_type_class(void)
ok(td.Stride == 0x0, "Stride is %#x, expected 0x0\n", td.Stride);
string_var = variable->lpVtbl->AsString(variable);
+ hr = string_var->lpVtbl->GetString(string_var, NULL);
+ ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
hr = string_var->lpVtbl->GetString(string_var, &str1);
-todo_wine
ok(SUCCEEDED(hr), "GetString failed %#x.\n", hr);
- if (SUCCEEDED(hr))
- ok(!strcmp(str1, "STRING"), "Unexpected value %s.\n", str1);
+ ok(!strcmp(str1, "STRING"), "Unexpected value %s.\n", str1);
variable = constantbuffer->lpVtbl->GetAnnotationByIndex(constantbuffer, 1);
string_var = variable->lpVtbl->AsString(variable);
hr = string_var->lpVtbl->GetString(string_var, &str2);
-todo_wine
ok(SUCCEEDED(hr), "GetString failed %#x.\n", hr);
- if (SUCCEEDED(hr))
- {
- ok(str2 != str1, "Unexpected string pointer.\n");
- ok(!strcmp(str2, "STRING"), "Unexpected value %s.\n", str1);
- }
+ ok(str2 != str1, "Unexpected string pointer.\n");
+ ok(!strcmp(str2, "STRING"), "Unexpected value %s.\n", str1);
+
+ /* Only two annotations */
+ variable = constantbuffer->lpVtbl->GetAnnotationByIndex(constantbuffer, 2);
+ string_var = variable->lpVtbl->AsString(variable);
+ hr = string_var->lpVtbl->GetString(string_var, NULL);
+ ok(hr == E_FAIL, "Unexpected hr %#x.\n", hr);
+ str1 = (void *)0xdeadbeef;
+ hr = string_var->lpVtbl->GetString(string_var, &str1);
+ ok(hr == E_FAIL, "Unexpected hr %#x.\n", hr);
+ ok(str1 == (void *)0xdeadbeef, "Unexpected pointer.\n");
/* check float f */
variable = constantbuffer->lpVtbl->GetMemberByIndex(constantbuffer, variable_nr++);
--
2.30.2
More information about the wine-devel
mailing list