Wine-Devel
By thread
wine-devel@list.winehq.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
October 2019
- 80 participants
- 1941 messages
[PATCH v5 14/14] d3dcompiler: Complete d3d10 ConstantBuffer implementation.
by Connor McAdams
Completes ID3D10ShaderReflectionConstantBuffer methods that were
previously stubs.
Signed-off-by: Connor McAdams <conmanx360(a)gmail.com>
---
dlls/d3dcompiler_43/reflection.c | 36 +++++++++++++++++++++++++++++---
1 file changed, 33 insertions(+), 3 deletions(-)
diff --git a/dlls/d3dcompiler_43/reflection.c b/dlls/d3dcompiler_43/reflection.c
index 55974a0675..f678d6fcf3 100644
--- a/dlls/d3dcompiler_43/reflection.c
+++ b/dlls/d3dcompiler_43/reflection.c
@@ -966,15 +966,45 @@ static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_constant_buffer_GetDesc
static ID3D10ShaderReflectionVariable * STDMETHODCALLTYPE d3d10_shader_reflection_constant_buffer_GetVariableByIndex(
ID3D10ShaderReflectionConstantBuffer *iface, UINT index)
{
- FIXME("iface %p, index %d stub!\n", iface, index);
+ struct d3dcompiler_shader_reflection_constant_buffer *reflection = impl_from_ID3D10ShaderReflectionConstantBuffer(iface);
- return &null_variable.ID3D10ShaderReflectionVariable_iface;
+ TRACE("iface %p, index %u.\n", iface, index);
+
+ if (index >= reflection->variable_count)
+ {
+ WARN("Invalid index specified.\n");
+ return &null_variable.ID3D10ShaderReflectionVariable_iface;
+ }
+
+ return &reflection->variables[index].ID3D10ShaderReflectionVariable_iface;
}
static ID3D10ShaderReflectionVariable * STDMETHODCALLTYPE d3d10_shader_reflection_constant_buffer_GetVariableByName(
ID3D10ShaderReflectionConstantBuffer *iface, const char *name)
{
- FIXME("iface %p, name %s stub!\n", iface, name);
+ struct d3dcompiler_shader_reflection_constant_buffer *reflection = impl_from_ID3D10ShaderReflectionConstantBuffer(iface);
+ unsigned int i;
+
+ TRACE("iface %p, name %s.\n", iface, debugstr_a(name));
+
+ if (!name)
+ {
+ WARN("Invalid argument specified.\n");
+ return &null_variable.ID3D10ShaderReflectionVariable_iface;
+ }
+
+ for (i = 0; i < reflection->variable_count; ++i)
+ {
+ struct d3dcompiler_shader_reflection_variable *v = &reflection->variables[i];
+
+ if (!strcmp(v->name, name))
+ {
+ TRACE("Returning ID3D10ShaderReflectionVariable %p.\n", v);
+ return &v->ID3D10ShaderReflectionVariable_iface;
+ }
+ }
+
+ WARN("Invalid name specified.\n");
return &null_variable.ID3D10ShaderReflectionVariable_iface;
}
--
2.20.1
Oct. 31, 2019
[PATCH v5 13/14] d3dcompiler: Implement d3d10 ShaderReflectionType methods.
by Connor McAdams
Implement methods for ID3D10ShaderReflectionType.
Signed-off-by: Connor McAdams <conmanx360(a)gmail.com>
---
dlls/d3dcompiler_43/reflection.c | 109 +++++++++++++++++++++++++++++++
1 file changed, 109 insertions(+)
diff --git a/dlls/d3dcompiler_43/reflection.c b/dlls/d3dcompiler_43/reflection.c
index 365e991193..55974a0675 100644
--- a/dlls/d3dcompiler_43/reflection.c
+++ b/dlls/d3dcompiler_43/reflection.c
@@ -1198,6 +1198,114 @@ static const struct ID3D11ShaderReflectionVariableVtbl d3dcompiler_shader_reflec
d3dcompiler_shader_reflection_variable_GetInterfaceSlot,
};
+/* ID3D10ShaderReflectionType methods */
+#ifndef D3D_COMPILER_VERSION
+static inline struct d3dcompiler_shader_reflection_type *impl_from_ID3D10ShaderReflectionType(ID3D10ShaderReflectionType *iface)
+{
+ return CONTAINING_RECORD(iface, struct d3dcompiler_shader_reflection_type, ID3D10ShaderReflectionType_iface);
+}
+
+static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_type_GetDesc(
+ ID3D10ShaderReflectionType *iface, D3D10_SHADER_TYPE_DESC *desc)
+{
+ struct d3dcompiler_shader_reflection_type *reflection = impl_from_ID3D10ShaderReflectionType(iface);
+
+ TRACE("iface %p, desc %p.\n", iface, desc);
+
+ if (reflection == &null_type)
+ {
+ WARN("Null type specified.\n");
+ return E_FAIL;
+ }
+
+ if (!desc)
+ {
+ WARN("Invalid argument specified.\n");
+ return E_FAIL;
+ }
+
+ memcpy(desc, &reflection->desc, sizeof(*desc));
+
+ return S_OK;
+}
+
+static ID3D10ShaderReflectionType * STDMETHODCALLTYPE d3d10_shader_reflection_type_GetMemberTypeByIndex(
+ ID3D10ShaderReflectionType *iface, UINT index)
+{
+ struct d3dcompiler_shader_reflection_type *reflection = impl_from_ID3D10ShaderReflectionType(iface);
+
+ TRACE("iface %p, index %u.\n", iface, index);
+
+ if (index >= reflection->desc.Members)
+ {
+ WARN("Invalid index specified.\n");
+ return &null_type.ID3D10ShaderReflectionType_iface;
+ }
+
+ return &reflection->members[index].type->ID3D10ShaderReflectionType_iface;
+}
+
+static ID3D10ShaderReflectionType * STDMETHODCALLTYPE d3d10_shader_reflection_type_GetMemberTypeByName(
+ ID3D10ShaderReflectionType *iface, const char *name)
+{
+ struct d3dcompiler_shader_reflection_type *reflection = impl_from_ID3D10ShaderReflectionType(iface);
+ unsigned int i;
+
+ TRACE("iface %p, name %s.\n", iface, debugstr_a(name));
+
+ if (!name)
+ {
+ WARN("Invalid argument specified.\n");
+ return &null_type.ID3D10ShaderReflectionType_iface;
+ }
+
+ for (i = 0; i < reflection->desc.Members; ++i)
+ {
+ struct d3dcompiler_shader_reflection_type_member *member = &reflection->members[i];
+
+ if (!strcmp(member->name, name))
+ {
+ TRACE("Returning ID3D10ShaderReflectionType %p.\n", member->type);
+ return &member->type->ID3D10ShaderReflectionType_iface;
+ }
+ }
+
+ WARN("Invalid name specified.\n");
+
+ return &null_type.ID3D10ShaderReflectionType_iface;
+}
+
+static const char * STDMETHODCALLTYPE d3d10_shader_reflection_type_GetMemberTypeName(
+ ID3D10ShaderReflectionType *iface, UINT index)
+{
+ struct d3dcompiler_shader_reflection_type *reflection = impl_from_ID3D10ShaderReflectionType(iface);
+
+ TRACE("iface %p, index %u.\n", iface, index);
+
+ if (reflection == &null_type)
+ {
+ WARN("Null type specified.\n");
+ return "$Invalid";
+ }
+
+ if (index >= reflection->desc.Members)
+ {
+ WARN("Invalid index specified.\n");
+ return NULL;
+ }
+
+ return reflection->members[index].name;
+}
+
+static const struct ID3D10ShaderReflectionTypeVtbl d3d10_shader_reflection_type_vtbl =
+{
+ d3d10_shader_reflection_type_GetDesc,
+ d3d10_shader_reflection_type_GetMemberTypeByIndex,
+ d3d10_shader_reflection_type_GetMemberTypeByName,
+ d3d10_shader_reflection_type_GetMemberTypeName,
+};
+#endif
+
/* ID3D11ShaderReflectionType methods */
static inline struct d3dcompiler_shader_reflection_type *impl_from_ID3D11ShaderReflectionType(ID3D11ShaderReflectionType *iface)
@@ -1625,6 +1733,7 @@ static struct d3dcompiler_shader_reflection_type *get_reflection_type(struct d3d
return NULL;
type->ID3D11ShaderReflectionType_iface.lpVtbl = &d3dcompiler_shader_reflection_type_vtbl;
+ type->ID3D10ShaderReflectionType_iface.lpVtbl = &d3d10_shader_reflection_type_vtbl;
type->id = offset;
type->reflection = reflection;
--
2.20.1
Oct. 31, 2019
[PATCH v5 12/14] d3dcompiler: Partially implement d3d10 ShaderReflectionVariable methods.
by Connor McAdams
Partially implement ID3D10ShaderReflectionVariable methods.
Signed-off-by: Connor McAdams <conmanx360(a)gmail.com>
---
dlls/d3dcompiler_43/reflection.c | 51 ++++++++++++++++++++++++++++++++
1 file changed, 51 insertions(+)
diff --git a/dlls/d3dcompiler_43/reflection.c b/dlls/d3dcompiler_43/reflection.c
index 9f9a983a2e..365e991193 100644
--- a/dlls/d3dcompiler_43/reflection.c
+++ b/dlls/d3dcompiler_43/reflection.c
@@ -1076,6 +1076,56 @@ static const struct ID3D11ShaderReflectionConstantBufferVtbl d3dcompiler_shader_
d3dcompiler_shader_reflection_constant_buffer_GetVariableByName,
};
+/* ID3D10ShaderReflectionVariable methods */
+#ifndef D3D_COMPILER_VERSION
+static inline struct d3dcompiler_shader_reflection_variable *impl_from_ID3D10ShaderReflectionVariable(ID3D10ShaderReflectionVariable *iface)
+{
+ return CONTAINING_RECORD(iface, struct d3dcompiler_shader_reflection_variable, ID3D10ShaderReflectionVariable_iface);
+}
+
+static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_variable_GetDesc(
+ ID3D10ShaderReflectionVariable *iface, D3D10_SHADER_VARIABLE_DESC *desc)
+{
+ struct d3dcompiler_shader_reflection_variable *reflection = impl_from_ID3D10ShaderReflectionVariable(iface);
+
+ TRACE("iface %p, desc %p.\n", iface, desc);
+
+ if (reflection == &null_variable)
+ {
+ WARN("Null variable specified.\n");
+ return E_FAIL;
+ }
+
+ if (!desc)
+ {
+ WARN("Invalid argument specified.\n");
+ return E_FAIL;
+ }
+
+ desc->Name = reflection->name;
+ desc->StartOffset = reflection->start_offset;
+ desc->Size = reflection->size;
+ desc->uFlags = reflection->flags;
+ desc->DefaultValue = reflection->default_value;
+
+ return S_OK;
+}
+
+static ID3D10ShaderReflectionType * STDMETHODCALLTYPE d3d10_shader_reflection_variable_GetType(
+ ID3D10ShaderReflectionVariable *iface)
+{
+ FIXME("iface %p stub!\n", iface);
+
+ return &null_type.ID3D10ShaderReflectionType_iface;
+}
+
+static const struct ID3D10ShaderReflectionVariableVtbl d3d10_shader_reflection_variable_vtbl =
+{
+ d3d10_shader_reflection_variable_GetDesc,
+ d3d10_shader_reflection_variable_GetType,
+};
+#endif
+
/* ID3D11ShaderReflectionVariable methods */
static inline struct d3dcompiler_shader_reflection_variable *impl_from_ID3D11ShaderReflectionVariable(ID3D11ShaderReflectionVariable *iface)
@@ -1616,6 +1666,7 @@ static HRESULT d3dcompiler_parse_variables(struct d3dcompiler_shader_reflection_
DWORD offset;
v->ID3D11ShaderReflectionVariable_iface.lpVtbl = &d3dcompiler_shader_reflection_variable_vtbl;
+ v->ID3D10ShaderReflectionVariable_iface.lpVtbl = &d3d10_shader_reflection_variable_vtbl;
v->constant_buffer = cb;
read_dword(&ptr, &offset);
--
2.20.1
Oct. 31, 2019
[PATCH v5 11/14] d3dcompiler: Complete d3d10 reflect GetConstantBuffer methods.
by Connor McAdams
Fill out ID3D10ShaderReflection ConstantBuffer related methods that were
previously stubs.
Signed-off-by: Connor McAdams <conmanx360(a)gmail.com>
---
dlls/d3dcompiler_43/reflection.c | 38 ++++++++++++++++++++++++++++----
1 file changed, 34 insertions(+), 4 deletions(-)
diff --git a/dlls/d3dcompiler_43/reflection.c b/dlls/d3dcompiler_43/reflection.c
index 6cd715cbad..9f9a983a2e 100644
--- a/dlls/d3dcompiler_43/reflection.c
+++ b/dlls/d3dcompiler_43/reflection.c
@@ -412,17 +412,47 @@ static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_GetDesc(ID3D10ShaderRef
static struct ID3D10ShaderReflectionConstantBuffer * STDMETHODCALLTYPE d3d10_shader_reflection_GetConstantBufferByIndex(
ID3D10ShaderReflection *iface, UINT index)
{
- FIXME("iface %p, index %u stub!\n", iface, index);
+ struct d3dcompiler_shader_reflection *reflection = impl_from_ID3D10ShaderReflection(iface);
- return NULL;
+ TRACE("iface %p, index %u.\n", iface, index);
+
+ if (index >= reflection->constant_buffer_count)
+ {
+ WARN("Invalid argument specified.\n");
+ return &null_constant_buffer.ID3D10ShaderReflectionConstantBuffer_iface;
+ }
+
+ return &reflection->constant_buffers[index].ID3D10ShaderReflectionConstantBuffer_iface;
}
static struct ID3D10ShaderReflectionConstantBuffer * STDMETHODCALLTYPE d3d10_shader_reflection_GetConstantBufferByName(
ID3D10ShaderReflection *iface, const char *name)
{
- FIXME("iface %p, name %s stub!\n", iface, debugstr_a(name));
+ struct d3dcompiler_shader_reflection *reflection = impl_from_ID3D10ShaderReflection(iface);
+ unsigned int i;
- return NULL;
+ TRACE("iface %p, name %s.\n", iface, debugstr_a(name));
+
+ if (!name)
+ {
+ WARN("Invalid argument specified.\n");
+ return &null_constant_buffer.ID3D10ShaderReflectionConstantBuffer_iface;
+ }
+
+ for (i = 0; i < reflection->constant_buffer_count; ++i)
+ {
+ struct d3dcompiler_shader_reflection_constant_buffer *d = &reflection->constant_buffers[i];
+
+ if (!strcmp(d->name, name))
+ {
+ TRACE("Returning ID3D10ShaderReflectionConstantBuffer %p.\n", d);
+ return &d->ID3D10ShaderReflectionConstantBuffer_iface;
+ }
+ }
+
+ WARN("Invalid name specified.\n");
+
+ return &null_constant_buffer.ID3D10ShaderReflectionConstantBuffer_iface;
}
static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_GetResourceBindingDesc(
--
2.20.1
Oct. 31, 2019
[PATCH v5 10/14] d3dcompiler: Partially implement d3d10 ConstantBuffer methods.
by Connor McAdams
Partially implement ID3D10ShaderReflectionConstantBuffer methods.
Signed-off-by: Connor McAdams <conmanx360(a)gmail.com>
---
dlls/d3dcompiler_43/reflection.c | 74 ++++++++++++++++++++++++++++++--
1 file changed, 71 insertions(+), 3 deletions(-)
diff --git a/dlls/d3dcompiler_43/reflection.c b/dlls/d3dcompiler_43/reflection.c
index 8e0c93deaa..6cd715cbad 100644
--- a/dlls/d3dcompiler_43/reflection.c
+++ b/dlls/d3dcompiler_43/reflection.c
@@ -47,6 +47,7 @@ struct d3dcompiler_shader_signature
struct d3dcompiler_shader_reflection_type
{
ID3D11ShaderReflectionType ID3D11ShaderReflectionType_iface;
+ ID3D10ShaderReflectionType ID3D10ShaderReflectionType_iface;
DWORD id;
struct wine_rb_entry entry;
@@ -68,6 +69,7 @@ struct d3dcompiler_shader_reflection_type_member
struct d3dcompiler_shader_reflection_variable
{
ID3D11ShaderReflectionVariable ID3D11ShaderReflectionVariable_iface;
+ ID3D10ShaderReflectionVariable ID3D10ShaderReflectionVariable_iface;
struct d3dcompiler_shader_reflection_constant_buffer *constant_buffer;
struct d3dcompiler_shader_reflection_type *type;
@@ -82,6 +84,7 @@ struct d3dcompiler_shader_reflection_variable
struct d3dcompiler_shader_reflection_constant_buffer
{
ID3D11ShaderReflectionConstantBuffer ID3D11ShaderReflectionConstantBuffer_iface;
+ ID3D10ShaderReflectionConstantBuffer ID3D10ShaderReflectionConstantBuffer_iface;
struct d3dcompiler_shader_reflection *reflection;
@@ -150,10 +153,15 @@ static const struct ID3D11ShaderReflectionConstantBufferVtbl d3dcompiler_shader_
static const struct ID3D11ShaderReflectionVariableVtbl d3dcompiler_shader_reflection_variable_vtbl;
static const struct ID3D11ShaderReflectionTypeVtbl d3dcompiler_shader_reflection_type_vtbl;
+static const struct ID3D10ShaderReflectionConstantBufferVtbl d3d10_shader_reflection_constant_buffer_vtbl;
+static const struct ID3D10ShaderReflectionVariableVtbl d3d10_shader_reflection_variable_vtbl;
+static const struct ID3D10ShaderReflectionTypeVtbl d3d10_shader_reflection_type_vtbl;
+
/* null objects - needed for invalid calls */
-static struct d3dcompiler_shader_reflection_constant_buffer null_constant_buffer = {{&d3dcompiler_shader_reflection_constant_buffer_vtbl}};
-static struct d3dcompiler_shader_reflection_type null_type = {{&d3dcompiler_shader_reflection_type_vtbl}};
-static struct d3dcompiler_shader_reflection_variable null_variable = {{&d3dcompiler_shader_reflection_variable_vtbl},
+static struct d3dcompiler_shader_reflection_constant_buffer null_constant_buffer = {{&d3dcompiler_shader_reflection_constant_buffer_vtbl},
+ {&d3d10_shader_reflection_constant_buffer_vtbl}};
+static struct d3dcompiler_shader_reflection_type null_type = {{&d3dcompiler_shader_reflection_type_vtbl}, {&d3d10_shader_reflection_type_vtbl}};
+static struct d3dcompiler_shader_reflection_variable null_variable = {{&d3dcompiler_shader_reflection_variable_vtbl}, {&d3d10_shader_reflection_variable_vtbl},
&null_constant_buffer, &null_type};
static BOOL copy_name(const char *ptr, char **name)
@@ -890,6 +898,65 @@ static const struct ID3D11ShaderReflectionVtbl d3dcompiler_shader_reflection_vtb
d3dcompiler_shader_reflection_GetRequiresFlags,
};
+/* ID3D10ShaderReflectionConstantBuffer methods */
+#ifndef D3D_COMPILER_VERSION
+static inline struct d3dcompiler_shader_reflection_constant_buffer *impl_from_ID3D10ShaderReflectionConstantBuffer(ID3D10ShaderReflectionConstantBuffer *iface)
+{
+ return CONTAINING_RECORD(iface, struct d3dcompiler_shader_reflection_constant_buffer, ID3D10ShaderReflectionConstantBuffer_iface);
+}
+
+static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_constant_buffer_GetDesc(
+ ID3D10ShaderReflectionConstantBuffer *iface, D3D10_SHADER_BUFFER_DESC *desc)
+{
+ struct d3dcompiler_shader_reflection_constant_buffer *reflection = impl_from_ID3D10ShaderReflectionConstantBuffer(iface);
+
+ TRACE("iface %p, desc %p.\n", iface, desc);
+
+ if (reflection == &null_constant_buffer)
+ {
+ WARN("Null constant buffer specified.\n");
+ return E_FAIL;
+ }
+
+ if (!desc)
+ {
+ WARN("Invalid argument specified.\n");
+ return E_FAIL;
+ }
+
+ desc->Name = reflection->name;
+ desc->Type = reflection->type;
+ desc->Variables = reflection->variable_count;
+ desc->Size = reflection->size;
+ desc->uFlags = reflection->flags;
+
+ return S_OK;
+}
+
+static ID3D10ShaderReflectionVariable * STDMETHODCALLTYPE d3d10_shader_reflection_constant_buffer_GetVariableByIndex(
+ ID3D10ShaderReflectionConstantBuffer *iface, UINT index)
+{
+ FIXME("iface %p, index %d stub!\n", iface, index);
+
+ return &null_variable.ID3D10ShaderReflectionVariable_iface;
+}
+
+static ID3D10ShaderReflectionVariable * STDMETHODCALLTYPE d3d10_shader_reflection_constant_buffer_GetVariableByName(
+ ID3D10ShaderReflectionConstantBuffer *iface, const char *name)
+{
+ FIXME("iface %p, name %s stub!\n", iface, name);
+
+ return &null_variable.ID3D10ShaderReflectionVariable_iface;
+}
+
+static const struct ID3D10ShaderReflectionConstantBufferVtbl d3d10_shader_reflection_constant_buffer_vtbl =
+{
+ d3d10_shader_reflection_constant_buffer_GetDesc,
+ d3d10_shader_reflection_constant_buffer_GetVariableByIndex,
+ d3d10_shader_reflection_constant_buffer_GetVariableByName,
+};
+#endif
+
/* ID3D11ShaderReflectionConstantBuffer methods */
static inline struct d3dcompiler_shader_reflection_constant_buffer *impl_from_ID3D11ShaderReflectionConstantBuffer(ID3D11ShaderReflectionConstantBuffer *iface)
@@ -1693,6 +1760,7 @@ static HRESULT d3dcompiler_parse_rdef(struct d3dcompiler_shader_reflection *r, c
struct d3dcompiler_shader_reflection_constant_buffer *cb = &constant_buffers[i];
cb->ID3D11ShaderReflectionConstantBuffer_iface.lpVtbl = &d3dcompiler_shader_reflection_constant_buffer_vtbl;
+ cb->ID3D10ShaderReflectionConstantBuffer_iface.lpVtbl = &d3d10_shader_reflection_constant_buffer_vtbl;
cb->reflection = r;
read_dword(&ptr, &offset);
--
2.20.1
Oct. 31, 2019
[PATCH v5 09/14] d3dcompiler: Implement d3d10 reflect GetResourceBindingDesc method.
by Connor McAdams
Implement the GetResourceBindingDesc method for d3d10 reflection shader
interface.
Signed-off-by: Connor McAdams <conmanx360(a)gmail.com>
---
dlls/d3dcompiler_43/reflection.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/dlls/d3dcompiler_43/reflection.c b/dlls/d3dcompiler_43/reflection.c
index c4471138e3..8e0c93deaa 100644
--- a/dlls/d3dcompiler_43/reflection.c
+++ b/dlls/d3dcompiler_43/reflection.c
@@ -420,9 +420,19 @@ static struct ID3D10ShaderReflectionConstantBuffer * STDMETHODCALLTYPE d3d10_sha
static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_GetResourceBindingDesc(
ID3D10ShaderReflection *iface, UINT index, D3D10_SHADER_INPUT_BIND_DESC *desc)
{
- FIXME("iface %p, index %u, desc %p stub!\n", iface, index, desc);
+ struct d3dcompiler_shader_reflection *reflection = impl_from_ID3D10ShaderReflection(iface);
- return E_NOTIMPL;
+ TRACE("iface %p, index %u, desc %p.\n", iface, index, desc);
+
+ if (!desc || index >= reflection->bound_resource_count)
+ {
+ WARN("Invalid argument specified.\n");
+ return E_INVALIDARG;
+ }
+
+ memcpy(desc, &reflection->bound_resources[index], sizeof(*desc));
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_GetInputParameterDesc(
--
2.20.1
Oct. 31, 2019
[PATCH v5 08/14] d3dcompiler: Implement d3d10 reflect In/OutputParameterDesc method.
by Connor McAdams
Implement GetInputParameterDesc and GetOutputParameterDesc methods for
D3D10 shader reflection interface.
Signed-off-by: Connor McAdams <conmanx360(a)gmail.com>
---
dlls/d3dcompiler_43/reflection.c | 28 ++++++++++++++++++++++++----
1 file changed, 24 insertions(+), 4 deletions(-)
diff --git a/dlls/d3dcompiler_43/reflection.c b/dlls/d3dcompiler_43/reflection.c
index bab5df890b..c4471138e3 100644
--- a/dlls/d3dcompiler_43/reflection.c
+++ b/dlls/d3dcompiler_43/reflection.c
@@ -428,17 +428,37 @@ static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_GetResourceBindingDesc(
static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_GetInputParameterDesc(
ID3D10ShaderReflection *iface, UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc)
{
- FIXME("iface %p, index %u, desc %p stub!\n", iface, index, desc);
+ struct d3dcompiler_shader_reflection *reflection = impl_from_ID3D10ShaderReflection(iface);
- return E_NOTIMPL;
+ TRACE("iface %p, index %u, desc %p.\n", iface, index, desc);
+
+ if (!desc || !reflection->isgn || index >= reflection->isgn->element_count)
+ {
+ WARN("Invalid argument specified.\n");
+ return E_INVALIDARG;
+ }
+
+ memcpy(desc, &reflection->isgn->elements[index], sizeof(*desc));
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_GetOutputParameterDesc(
ID3D10ShaderReflection *iface, UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc)
{
- FIXME("iface %p, index %u, desc %p stub!\n", iface, index, desc);
+ struct d3dcompiler_shader_reflection *reflection = impl_from_ID3D10ShaderReflection(iface);
- return E_NOTIMPL;
+ TRACE("iface %p, index %u, desc %p.\n", iface, index, desc);
+
+ if (!desc || !reflection->osgn || index >= reflection->osgn->element_count)
+ {
+ WARN("Invalid argument specified.\n");
+ return E_INVALIDARG;
+ }
+
+ memcpy(desc, &reflection->osgn->elements[index], sizeof(*desc));
+
+ return S_OK;
}
const struct ID3D10ShaderReflectionVtbl d3d10_shader_reflection_vtbl =
--
2.20.1
Oct. 31, 2019
[PATCH v5 07/14] d3dcompiler: implement d3d10 reflection GetDesc method.
by Connor McAdams
Implements the GetDesc method for D3D10 reflection interface.
Signed-off-by: Connor McAdams <conmanx360(a)gmail.com>
---
dlls/d3dcompiler_43/reflection.c | 41 ++++++++++++++++++++++++++++++--
1 file changed, 39 insertions(+), 2 deletions(-)
diff --git a/dlls/d3dcompiler_43/reflection.c b/dlls/d3dcompiler_43/reflection.c
index 63c99ad2b7..bab5df890b 100644
--- a/dlls/d3dcompiler_43/reflection.c
+++ b/dlls/d3dcompiler_43/reflection.c
@@ -359,9 +359,46 @@ static ULONG STDMETHODCALLTYPE d3d10_shader_reflection_Release(ID3D10ShaderRefle
static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_GetDesc(ID3D10ShaderReflection *iface, D3D10_SHADER_DESC *desc)
{
- FIXME("iface %p, desc %p stub!\n", iface, desc);
+ struct d3dcompiler_shader_reflection *reflection = impl_from_ID3D10ShaderReflection(iface);
- return E_NOTIMPL;
+ FIXME("iface %p, desc %p partial stub!\n", iface, desc);
+
+ if (!desc)
+ {
+ WARN("Invalid argument specified.\n");
+ return E_FAIL;
+ }
+
+ desc->Version = reflection->version;
+ desc->Creator = reflection->creator;
+ desc->Flags = reflection->flags;
+ desc->ConstantBuffers = reflection->constant_buffer_count;
+ desc->BoundResources = reflection->bound_resource_count;
+ desc->InputParameters = reflection->isgn ? reflection->isgn->element_count : 0;
+ desc->OutputParameters = reflection->osgn ? reflection->osgn->element_count : 0;
+ desc->InstructionCount = reflection->instruction_count;
+ desc->TempRegisterCount = reflection->temp_register_count;
+ desc->TempArrayCount = reflection->temp_array_count;
+ desc->DefCount = 0;
+ desc->DclCount = reflection->dcl_count;
+ desc->TextureNormalInstructions = reflection->texture_normal_instructions;
+ desc->TextureLoadInstructions = reflection->texture_load_instructions;
+ desc->TextureCompInstructions = reflection->texture_comp_instructions;
+ desc->TextureBiasInstructions = reflection->texture_bias_instructions;
+ desc->TextureGradientInstructions = reflection->texture_gradient_instructions;
+ desc->FloatInstructionCount = reflection->float_instruction_count;
+ desc->IntInstructionCount = reflection->int_instruction_count;
+ desc->UintInstructionCount = reflection->uint_instruction_count;
+ desc->StaticFlowControlCount = reflection->static_flow_control_count;
+ desc->DynamicFlowControlCount = reflection->dynamic_flow_control_count;
+ desc->MacroInstructionCount = 0;
+ desc->ArrayInstructionCount = reflection->array_instruction_count;
+ desc->CutInstructionCount = reflection->cut_instruction_count;
+ desc->EmitInstructionCount = reflection->emit_instruction_count;
+ desc->GSOutputTopology = reflection->gs_output_topology;
+ desc->GSMaxOutputVertexCount = reflection->gs_max_output_vertex_count;
+
+ return S_OK;
}
static struct ID3D10ShaderReflectionConstantBuffer * STDMETHODCALLTYPE d3d10_shader_reflection_GetConstantBufferByIndex(
--
2.20.1
Oct. 31, 2019
[PATCH v5 06/14] d3dcompiler: Add shader init to D3D10ReflectShader.
by Connor McAdams
Modify D3D10ReflectShader to now use the
d3dcompiler_shader_reflection_init function, and take D3D11 reflect
shader vtbl assignment out of it so it is version agnostic.
Signed-off-by: Connor McAdams <conmanx360(a)gmail.com>
---
dlls/d3dcompiler_43/reflection.c | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/dlls/d3dcompiler_43/reflection.c b/dlls/d3dcompiler_43/reflection.c
index dc91472a37..63c99ad2b7 100644
--- a/dlls/d3dcompiler_43/reflection.c
+++ b/dlls/d3dcompiler_43/reflection.c
@@ -1813,9 +1813,6 @@ static HRESULT d3dcompiler_shader_reflection_init(struct d3dcompiler_shader_refl
HRESULT hr;
unsigned int i;
- reflection->ID3D11ShaderReflection_iface.lpVtbl = &d3dcompiler_shader_reflection_vtbl;
- reflection->refcount = 1;
-
wine_rb_init(&reflection->types, d3dcompiler_shader_reflection_type_compare);
hr = dxbc_parse(data, data_size, &src_dxbc);
@@ -1932,8 +1929,9 @@ err_out:
HRESULT WINAPI D3D10ReflectShader(const void *data, SIZE_T data_size, ID3D10ShaderReflection **reflector)
{
struct d3dcompiler_shader_reflection *object;
+ HRESULT hr;
- FIXME("data %p, data_size %lu, reflector %p stub!\n", data, data_size, reflector);
+ TRACE("data %p, data_size %lu, reflector %p.\n", data, data_size, reflector);
if (!(object = heap_alloc_zero(sizeof(*object))))
{
@@ -1944,6 +1942,14 @@ HRESULT WINAPI D3D10ReflectShader(const void *data, SIZE_T data_size, ID3D10Shad
object->ID3D10ShaderReflection_iface.lpVtbl = &d3d10_shader_reflection_vtbl;
object->refcount = 1;
+ hr = d3dcompiler_shader_reflection_init(object, data, data_size);
+ if (FAILED(hr))
+ {
+ WARN("Failed to initialize shader reflection.\n");
+ HeapFree(GetProcessHeap(), 0, object);
+ return hr;
+ }
+
*reflector = &object->ID3D10ShaderReflection_iface;
TRACE("Created ID3D10ShaderReflection %p.\n", object);
@@ -1982,6 +1988,9 @@ HRESULT WINAPI D3DReflect(const void *data, SIZE_T data_size, REFIID riid, void
if (!object)
return E_OUTOFMEMORY;
+ object->ID3D11ShaderReflection_iface.lpVtbl = &d3dcompiler_shader_reflection_vtbl;
+ object->refcount = 1;
+
hr = d3dcompiler_shader_reflection_init(object, data, data_size);
if (FAILED(hr))
{
--
2.20.1
Oct. 31, 2019
[PATCH v5 05/14] d3dcompiler: Move D3D10 reflection into d3dcompiler.
by Connor McAdams
Move the methods for d3d10 reflection into d3dcompiler, along with the
D3D10Reflect function.
Signed-off-by: Connor McAdams <conmanx360(a)gmail.com>
---
dlls/d3d10/d3d10_main.c | 22 -----
dlls/d3d10/d3d10_private.h | 8 --
dlls/d3d10/shader.c | 112 ------------------------
dlls/d3dcompiler_43/reflection.c | 142 +++++++++++++++++++++++++++++++
4 files changed, 142 insertions(+), 142 deletions(-)
diff --git a/dlls/d3d10/d3d10_main.c b/dlls/d3d10/d3d10_main.c
index 4481c45bc4..cb0e75d379 100644
--- a/dlls/d3d10/d3d10_main.c
+++ b/dlls/d3d10/d3d10_main.c
@@ -316,25 +316,3 @@ const char * WINAPI D3D10GetPixelShaderProfile(ID3D10Device *device)
return "ps_4_0";
}
-
-HRESULT WINAPI D3D10ReflectShader(const void *data, SIZE_T data_size, ID3D10ShaderReflection **reflector)
-{
- struct d3d10_shader_reflection *object;
-
- FIXME("data %p, data_size %lu, reflector %p stub!\n", data, data_size, reflector);
-
- if (!(object = heap_alloc_zero(sizeof(*object))))
- {
- ERR("Failed to allocate D3D10 shader reflection object memory\n");
- return E_OUTOFMEMORY;
- }
-
- object->ID3D10ShaderReflection_iface.lpVtbl = &d3d10_shader_reflection_vtbl;
- object->refcount = 1;
-
- *reflector = &object->ID3D10ShaderReflection_iface;
-
- TRACE("Created ID3D10ShaderReflection %p\n", object);
-
- return S_OK;
-}
diff --git a/dlls/d3d10/d3d10_private.h b/dlls/d3d10/d3d10_private.h
index e56996eb75..01330862c4 100644
--- a/dlls/d3d10/d3d10_private.h
+++ b/dlls/d3d10/d3d10_private.h
@@ -249,14 +249,6 @@ struct d3d10_effect
struct d3d10_effect_technique *techniques;
};
-/* ID3D10ShaderReflection */
-extern const struct ID3D10ShaderReflectionVtbl d3d10_shader_reflection_vtbl DECLSPEC_HIDDEN;
-struct d3d10_shader_reflection
-{
- ID3D10ShaderReflection ID3D10ShaderReflection_iface;
- LONG refcount;
-};
-
HRESULT d3d10_effect_parse(struct d3d10_effect *This, const void *data, SIZE_T data_size) DECLSPEC_HIDDEN;
/* D3D10Core */
diff --git a/dlls/d3d10/shader.c b/dlls/d3d10/shader.c
index 52e3cc06bf..d198689af6 100644
--- a/dlls/d3d10/shader.c
+++ b/dlls/d3d10/shader.c
@@ -22,118 +22,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(d3d10);
-/* IUnknown methods */
-
-static inline struct d3d10_shader_reflection *impl_from_ID3D10ShaderReflection(ID3D10ShaderReflection *iface)
-{
- return CONTAINING_RECORD(iface, struct d3d10_shader_reflection, ID3D10ShaderReflection_iface);
-}
-
-static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_QueryInterface(ID3D10ShaderReflection *iface, REFIID riid, void **object)
-{
- TRACE("iface %p, riid %s, object %p\n", iface, debugstr_guid(riid), object);
-
- if (IsEqualGUID(riid, &IID_ID3D10ShaderReflection)
- || IsEqualGUID(riid, &IID_IUnknown))
- {
- IUnknown_AddRef(iface);
- *object = iface;
- return S_OK;
- }
-
- WARN("%s not implemented, returning E_NOINTERFACE\n", debugstr_guid(riid));
-
- *object = NULL;
- return E_NOINTERFACE;
-}
-
-static ULONG STDMETHODCALLTYPE d3d10_shader_reflection_AddRef(ID3D10ShaderReflection *iface)
-{
- struct d3d10_shader_reflection *This = impl_from_ID3D10ShaderReflection(iface);
- ULONG refcount = InterlockedIncrement(&This->refcount);
-
- TRACE("%p increasing refcount to %u\n", This, refcount);
-
- return refcount;
-}
-
-static ULONG STDMETHODCALLTYPE d3d10_shader_reflection_Release(ID3D10ShaderReflection *iface)
-{
- struct d3d10_shader_reflection *This = impl_from_ID3D10ShaderReflection(iface);
- ULONG refcount = InterlockedDecrement(&This->refcount);
-
- TRACE("%p decreasing refcount to %u\n", This, refcount);
-
- if (!refcount)
- heap_free(This);
-
- return refcount;
-}
-
-/* ID3D10ShaderReflection methods */
-
-static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_GetDesc(ID3D10ShaderReflection *iface, D3D10_SHADER_DESC *desc)
-{
- FIXME("iface %p, desc %p stub!\n", iface, desc);
-
- return E_NOTIMPL;
-}
-
-static struct ID3D10ShaderReflectionConstantBuffer * STDMETHODCALLTYPE d3d10_shader_reflection_GetConstantBufferByIndex(
- ID3D10ShaderReflection *iface, UINT index)
-{
- FIXME("iface %p, index %u stub!\n", iface, index);
-
- return NULL;
-}
-
-static struct ID3D10ShaderReflectionConstantBuffer * STDMETHODCALLTYPE d3d10_shader_reflection_GetConstantBufferByName(
- ID3D10ShaderReflection *iface, const char *name)
-{
- FIXME("iface %p, name %s stub!\n", iface, debugstr_a(name));
-
- return NULL;
-}
-
-static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_GetResourceBindingDesc(
- ID3D10ShaderReflection *iface, UINT index, D3D10_SHADER_INPUT_BIND_DESC *desc)
-{
- FIXME("iface %p, index %u, desc %p stub!\n", iface, index, desc);
-
- return E_NOTIMPL;
-}
-
-static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_GetInputParameterDesc(
- ID3D10ShaderReflection *iface, UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc)
-{
- FIXME("iface %p, index %u, desc %p stub!\n", iface, index, desc);
-
- return E_NOTIMPL;
-}
-
-static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_GetOutputParameterDesc(
- ID3D10ShaderReflection *iface, UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc)
-{
- FIXME("iface %p, index %u, desc %p stub!\n", iface, index, desc);
-
- return E_NOTIMPL;
-}
-
-const struct ID3D10ShaderReflectionVtbl d3d10_shader_reflection_vtbl =
-{
- /* IUnknown methods */
- d3d10_shader_reflection_QueryInterface,
- d3d10_shader_reflection_AddRef,
- d3d10_shader_reflection_Release,
- /* ID3D10ShaderReflection methods */
- d3d10_shader_reflection_GetDesc,
- d3d10_shader_reflection_GetConstantBufferByIndex,
- d3d10_shader_reflection_GetConstantBufferByName,
- d3d10_shader_reflection_GetResourceBindingDesc,
- d3d10_shader_reflection_GetInputParameterDesc,
- d3d10_shader_reflection_GetOutputParameterDesc,
-};
-
HRESULT WINAPI D3D10CompileShader(const char *data, SIZE_T data_size, const char *filename,
const D3D10_SHADER_MACRO *defines, ID3D10Include *include, const char *entrypoint,
const char *profile, UINT flags, ID3D10Blob **shader, ID3D10Blob **error_messages)
diff --git a/dlls/d3dcompiler_43/reflection.c b/dlls/d3dcompiler_43/reflection.c
index 8f71bd9ce8..dc91472a37 100644
--- a/dlls/d3dcompiler_43/reflection.c
+++ b/dlls/d3dcompiler_43/reflection.c
@@ -24,6 +24,7 @@
#include "d3dcompiler_private.h"
#include "winternl.h"
+#include "d3d10.h"
WINE_DEFAULT_DEBUG_CHANNEL(d3dcompiler);
@@ -97,6 +98,7 @@ struct d3dcompiler_shader_reflection_constant_buffer
struct d3dcompiler_shader_reflection
{
ID3D11ShaderReflection ID3D11ShaderReflection_iface;
+ ID3D10ShaderReflection ID3D10ShaderReflection_iface;
LONG refcount;
DWORD target;
@@ -302,6 +304,122 @@ static void reflection_cleanup(struct d3dcompiler_shader_reflection *ref)
HeapFree(GetProcessHeap(), 0, ref->creator);
}
+/*
+ * D3D10 Reflect methods.
+ */
+#ifndef D3D_COMPILER_VERSION
+/* IUnknown methods */
+static inline struct d3dcompiler_shader_reflection *impl_from_ID3D10ShaderReflection(ID3D10ShaderReflection *iface)
+{
+ return CONTAINING_RECORD(iface, struct d3dcompiler_shader_reflection, ID3D10ShaderReflection_iface);
+}
+
+static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_QueryInterface(ID3D10ShaderReflection *iface, REFIID riid, void **object)
+{
+ TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), object);
+
+ if (IsEqualGUID(riid, &IID_ID3D10ShaderReflection)
+ || IsEqualGUID(riid, &IID_IUnknown))
+ {
+ IUnknown_AddRef(iface);
+ *object = iface;
+ return S_OK;
+ }
+
+ WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
+
+ *object = NULL;
+ return E_NOINTERFACE;
+}
+
+static ULONG STDMETHODCALLTYPE d3d10_shader_reflection_AddRef(ID3D10ShaderReflection *iface)
+{
+ struct d3dcompiler_shader_reflection *reflection = impl_from_ID3D10ShaderReflection(iface);
+ ULONG refcount = InterlockedIncrement(&reflection->refcount);
+
+ TRACE("%p increasing refcount to %u.\n", reflection, refcount);
+
+ return refcount;
+}
+
+static ULONG STDMETHODCALLTYPE d3d10_shader_reflection_Release(ID3D10ShaderReflection *iface)
+{
+ struct d3dcompiler_shader_reflection *reflection = impl_from_ID3D10ShaderReflection(iface);
+ ULONG refcount = InterlockedDecrement(&reflection->refcount);
+
+ TRACE("%p decreasing refcount to %u.\n", reflection, refcount);
+
+ if (!refcount)
+ heap_free(reflection);
+
+ return refcount;
+}
+
+/* ID3D10ShaderReflection methods */
+
+static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_GetDesc(ID3D10ShaderReflection *iface, D3D10_SHADER_DESC *desc)
+{
+ FIXME("iface %p, desc %p stub!\n", iface, desc);
+
+ return E_NOTIMPL;
+}
+
+static struct ID3D10ShaderReflectionConstantBuffer * STDMETHODCALLTYPE d3d10_shader_reflection_GetConstantBufferByIndex(
+ ID3D10ShaderReflection *iface, UINT index)
+{
+ FIXME("iface %p, index %u stub!\n", iface, index);
+
+ return NULL;
+}
+
+static struct ID3D10ShaderReflectionConstantBuffer * STDMETHODCALLTYPE d3d10_shader_reflection_GetConstantBufferByName(
+ ID3D10ShaderReflection *iface, const char *name)
+{
+ FIXME("iface %p, name %s stub!\n", iface, debugstr_a(name));
+
+ return NULL;
+}
+
+static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_GetResourceBindingDesc(
+ ID3D10ShaderReflection *iface, UINT index, D3D10_SHADER_INPUT_BIND_DESC *desc)
+{
+ FIXME("iface %p, index %u, desc %p stub!\n", iface, index, desc);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_GetInputParameterDesc(
+ ID3D10ShaderReflection *iface, UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc)
+{
+ FIXME("iface %p, index %u, desc %p stub!\n", iface, index, desc);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE d3d10_shader_reflection_GetOutputParameterDesc(
+ ID3D10ShaderReflection *iface, UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc)
+{
+ FIXME("iface %p, index %u, desc %p stub!\n", iface, index, desc);
+
+ return E_NOTIMPL;
+}
+
+const struct ID3D10ShaderReflectionVtbl d3d10_shader_reflection_vtbl =
+{
+ /* IUnknown methods */
+ d3d10_shader_reflection_QueryInterface,
+ d3d10_shader_reflection_AddRef,
+ d3d10_shader_reflection_Release,
+ /* ID3D10ShaderReflection methods */
+ d3d10_shader_reflection_GetDesc,
+ d3d10_shader_reflection_GetConstantBufferByIndex,
+ d3d10_shader_reflection_GetConstantBufferByName,
+ d3d10_shader_reflection_GetResourceBindingDesc,
+ d3d10_shader_reflection_GetInputParameterDesc,
+ d3d10_shader_reflection_GetOutputParameterDesc,
+};
+#endif
+
/* IUnknown methods */
static inline struct d3dcompiler_shader_reflection *impl_from_ID3D11ShaderReflection(ID3D11ShaderReflection *iface)
@@ -1810,6 +1928,30 @@ err_out:
return hr;
}
+#ifndef D3D_COMPILER_VERSION
+HRESULT WINAPI D3D10ReflectShader(const void *data, SIZE_T data_size, ID3D10ShaderReflection **reflector)
+{
+ struct d3dcompiler_shader_reflection *object;
+
+ FIXME("data %p, data_size %lu, reflector %p stub!\n", data, data_size, reflector);
+
+ if (!(object = heap_alloc_zero(sizeof(*object))))
+ {
+ ERR("Failed to allocate D3D10 shader reflection object memory.\n");
+ return E_OUTOFMEMORY;
+ }
+
+ object->ID3D10ShaderReflection_iface.lpVtbl = &d3d10_shader_reflection_vtbl;
+ object->refcount = 1;
+
+ *reflector = &object->ID3D10ShaderReflection_iface;
+
+ TRACE("Created ID3D10ShaderReflection %p.\n", object);
+
+ return S_OK;
+}
+#endif
+
HRESULT WINAPI D3DReflect(const void *data, SIZE_T data_size, REFIID riid, void **reflector)
{
struct d3dcompiler_shader_reflection *object;
--
2.20.1
Oct. 31, 2019