Added patches to implement various deferred context methods.

This commit is contained in:
Sebastian Lackner 2017-07-09 16:44:56 +02:00
parent a59a69804a
commit 0211a4935e
12 changed files with 825 additions and 0 deletions

View File

@ -0,0 +1,81 @@
From 848ac26c5b1e6551639fbef1a03e93ca14d934a2 Mon Sep 17 00:00:00 2001
From: Kimmo Myllyvirta <kimmo.myllyvirta@gmail.com>
Date: Fri, 7 Jul 2017 11:01:07 +0300
Subject: d3d11: Implement GSSetShader for deferred contexts.
---
dlls/d3d11/device.c | 29 ++++++++++++++++++++++++++++-
1 file changed, 28 insertions(+), 1 deletion(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index 8642bf50fb1..98aa5ef6a77 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -42,6 +42,7 @@ enum deferred_cmd
DEFERRED_CSSETSHADER, /* cs_info */
DEFERRED_DSSETSHADER, /* ds_info */
+ DEFERRED_GSSETSHADER, /* gs_info */
DEFERRED_HSSETSHADER, /* hs_info */
DEFERRED_PSSETSHADER, /* ps_info */
DEFERRED_VSSETSHADER, /* vs_info */
@@ -138,6 +139,11 @@ struct deferred_call
} ds_info;
struct
{
+ ID3D11GeometryShader *shader;
+ /* FIXME: add class instances */
+ } gs_info;
+ struct
+ {
ID3D11HullShader *shader;
/* FIXME: add class instances */
} hs_info;
@@ -404,6 +410,12 @@ static void free_deferred_calls(struct list *commands)
ID3D11DomainShader_Release(call->ds_info.shader);
break;
}
+ case DEFERRED_GSSETSHADER:
+ {
+ if (call->gs_info.shader)
+ ID3D11GeometryShader_Release(call->gs_info.shader);
+ break;
+ }
case DEFERRED_HSSETSHADER:
{
if (call->hs_info.shader)
@@ -577,6 +589,11 @@ static void exec_deferred_calls(ID3D11DeviceContext *iface, struct list *command
ID3D11DeviceContext_DSSetShader(iface, call->ds_info.shader, NULL, 0);
break;
}
+ case DEFERRED_GSSETSHADER:
+ {
+ ID3D11DeviceContext_GSSetShader(iface, call->gs_info.shader, NULL, 0);
+ break;
+ }
case DEFERRED_HSSETSHADER:
{
ID3D11DeviceContext_HSSetShader(iface, call->hs_info.shader, NULL, 0);
@@ -3875,8 +3892,18 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_GSSetConstantBuffers(ID3D11
static void STDMETHODCALLTYPE d3d11_deferred_context_GSSetShader(ID3D11DeviceContext *iface,
ID3D11GeometryShader *shader, ID3D11ClassInstance *const *class_instances, UINT class_instance_count)
{
- FIXME("iface %p, shader %p, class_instances %p, class_instance_count %u stub!\n",
+ struct d3d11_deferred_context *context = impl_from_deferred_ID3D11DeviceContext(iface);
+ struct deferred_call *call;
+
+ TRACE("iface %p, shader %p, class_instances %p, class_instance_count %u.\n",
iface, shader, class_instances, class_instance_count);
+
+ if (!(call = add_deferred_call(context, 0)))
+ return;
+
+ call->cmd = DEFERRED_GSSETSHADER;
+ if (shader) ID3D11GeometryShader_AddRef(shader);
+ call->gs_info.shader = shader;
}
static void STDMETHODCALLTYPE d3d11_deferred_context_IASetPrimitiveTopology(ID3D11DeviceContext *iface,
--
2.13.1

View File

@ -0,0 +1,70 @@
From 4e7076c5cc9806ce0e0218588ea587cfe3db8951 Mon Sep 17 00:00:00 2001
From: Kimmo Myllyvirta <kimmo.myllyvirta@gmail.com>
Date: Fri, 7 Jul 2017 11:04:41 +0300
Subject: d3d11: Implement GSSetConstantBuffers for deferred contexts.
---
dlls/d3d11/device.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index 98aa5ef6a77..014f39f74c1 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -55,6 +55,7 @@ enum deferred_cmd
DEFERRED_CSSETCONSTANTBUFFERS, /* constant_buffers_info */
DEFERRED_DSSETCONSTANTBUFFERS, /* constant_buffers_info */
+ DEFERRED_GSSETCONSTANTBUFFERS, /* constant_buffers_info */
DEFERRED_HSSETCONSTANTBUFFERS, /* constant_buffers_info */
DEFERRED_PSSETCONSTANTBUFFERS, /* constant_buffers_info */
DEFERRED_VSSETCONSTANTBUFFERS, /* constant_buffers_info */
@@ -309,8 +310,8 @@ static void add_deferred_set_samplers(struct d3d11_deferred_context *context, en
}
}
-/* for DEFERRED_CSSETCONSTANTBUFFERS. DEFERRED_DSSETCONSTANTBUFFERS, DEFERRED_HSSETCONSTANTBUFFERS,
- * DEFERRED_PSSETCONSTANTBUFFERS and DEFERRED_VSSETCONSTANTBUFFERS */
+/* for DEFERRED_CSSETCONSTANTBUFFERS. DEFERRED_DSSETCONSTANTBUFFERS, DEFERRED_GSSETCONSTANTBUFFERS,
+ * DEFERRED_HSSETCONSTANTBUFFERS, DEFERRED_PSSETCONSTANTBUFFERS and DEFERRED_VSSETCONSTANTBUFFERS */
static void add_deferred_set_constant_buffers(struct d3d11_deferred_context *context, enum deferred_cmd cmd,
UINT start_slot, UINT buffer_count, ID3D11Buffer *const *buffers)
{
@@ -456,6 +457,7 @@ static void free_deferred_calls(struct list *commands)
}
case DEFERRED_CSSETCONSTANTBUFFERS:
case DEFERRED_DSSETCONSTANTBUFFERS:
+ case DEFERRED_GSSETCONSTANTBUFFERS:
case DEFERRED_HSSETCONSTANTBUFFERS:
case DEFERRED_PSSETCONSTANTBUFFERS:
case DEFERRED_VSSETCONSTANTBUFFERS:
@@ -645,6 +647,12 @@ static void exec_deferred_calls(ID3D11DeviceContext *iface, struct list *command
call->constant_buffers_info.num_buffers, call->constant_buffers_info.buffers);
break;
}
+ case DEFERRED_GSSETCONSTANTBUFFERS:
+ {
+ ID3D11DeviceContext_GSSetConstantBuffers(iface, call->constant_buffers_info.start_slot,
+ call->constant_buffers_info.num_buffers, call->constant_buffers_info.buffers);
+ break;
+ }
case DEFERRED_HSSETCONSTANTBUFFERS:
{
ID3D11DeviceContext_HSSetConstantBuffers(iface, call->constant_buffers_info.start_slot,
@@ -3885,8 +3893,12 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_DrawInstanced(ID3D11DeviceC
static void STDMETHODCALLTYPE d3d11_deferred_context_GSSetConstantBuffers(ID3D11DeviceContext *iface,
UINT start_slot, UINT buffer_count, ID3D11Buffer *const *buffers)
{
- FIXME("iface %p, start_slot %u, buffer_count %u, buffers %p stub!\n",
+ struct d3d11_deferred_context *context = impl_from_deferred_ID3D11DeviceContext(iface);
+
+ TRACE("iface %p, start_slot %u, buffer_count %u, buffers %p.\n",
iface, start_slot, buffer_count, buffers);
+
+ add_deferred_set_constant_buffers(context, DEFERRED_GSSETCONSTANTBUFFERS, start_slot, buffer_count, buffers);
}
static void STDMETHODCALLTYPE d3d11_deferred_context_GSSetShader(ID3D11DeviceContext *iface,
--
2.13.1

View File

@ -0,0 +1,68 @@
From bde4fe1e674ff4dc32e9417b3ef020eb96cf6700 Mon Sep 17 00:00:00 2001
From: Kimmo Myllyvirta <kimmo.myllyvirta@gmail.com>
Date: Fri, 7 Jul 2017 11:07:15 +0300
Subject: d3d11: Implement CSSetShaderResources for deferred contexts.
---
dlls/d3d11/device.c | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index 014f39f74c1..ae92b190de5 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -47,6 +47,7 @@ enum deferred_cmd
DEFERRED_PSSETSHADER, /* ps_info */
DEFERRED_VSSETSHADER, /* vs_info */
+ DEFERRED_CSSETSHADERRESOURCES, /* res_info */
DEFERRED_DSSETSHADERRESOURCES, /* res_info */
DEFERRED_PSSETSHADERRESOURCES, /* res_info */
@@ -268,7 +269,7 @@ static struct deferred_call *add_deferred_call(struct d3d11_deferred_context *co
return call;
}
-/* for DEFERRED_DSSETSHADERRESOURCES and DEFERRED_PSSETSHADERRESOURCES */
+/* for DEFERRED_CSSETSHADERRESOURCES, DEFERRED_DSSETSHADERRESOURCES and DEFERRED_PSSETSHADERRESOURCES */
static void add_deferred_set_shader_resources(struct d3d11_deferred_context *context, enum deferred_cmd cmd,
UINT start_slot, UINT view_count, ID3D11ShaderResourceView *const *views)
{
@@ -435,6 +436,7 @@ static void free_deferred_calls(struct list *commands)
ID3D11VertexShader_Release(call->vs_info.shader);
break;
}
+ case DEFERRED_CSSETSHADERRESOURCES:
case DEFERRED_DSSETSHADERRESOURCES:
case DEFERRED_PSSETSHADERRESOURCES:
{
@@ -611,6 +613,12 @@ static void exec_deferred_calls(ID3D11DeviceContext *iface, struct list *command
ID3D11DeviceContext_VSSetShader(iface, call->vs_info.shader, NULL, 0);
break;
}
+ case DEFERRED_CSSETSHADERRESOURCES:
+ {
+ ID3D11DeviceContext_CSSetShaderResources(iface, call->res_info.start_slot,
+ call->res_info.num_views, call->res_info.views);
+ break;
+ }
case DEFERRED_DSSETSHADERRESOURCES:
{
ID3D11DeviceContext_DSSetShaderResources(iface, call->res_info.start_slot,
@@ -4374,8 +4382,12 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_DSSetConstantBuffers(ID3D11
static void STDMETHODCALLTYPE d3d11_deferred_context_CSSetShaderResources(ID3D11DeviceContext *iface,
UINT start_slot, UINT view_count, ID3D11ShaderResourceView *const *views)
{
- FIXME("iface %p, start_slot %u, view_count %u, views %p stub!\n",
+ struct d3d11_deferred_context *context = impl_from_deferred_ID3D11DeviceContext(iface);
+
+ TRACE("iface %p, start_slot %u, view_count %u, views %p.\n",
iface, start_slot, view_count, views);
+
+ add_deferred_set_shader_resources(context, DEFERRED_CSSETSHADERRESOURCES, start_slot, view_count, views);
}
static void STDMETHODCALLTYPE d3d11_deferred_context_CSSetUnorderedAccessViews(ID3D11DeviceContext *iface,
--
2.13.1

View File

@ -0,0 +1,69 @@
From d55adbf05b349aa1cd3b6134cd5d9b4c211ff6db Mon Sep 17 00:00:00 2001
From: Kimmo Myllyvirta <kimmo.myllyvirta@gmail.com>
Date: Fri, 7 Jul 2017 11:09:57 +0300
Subject: d3d11: Implement GSSetShaderResources for deferred contexts.
---
dlls/d3d11/device.c | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index ae92b190de5..917101d055c 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -49,6 +49,7 @@ enum deferred_cmd
DEFERRED_CSSETSHADERRESOURCES, /* res_info */
DEFERRED_DSSETSHADERRESOURCES, /* res_info */
+ DEFERRED_GSSETSHADERRESOURCES, /* res_info */
DEFERRED_PSSETSHADERRESOURCES, /* res_info */
DEFERRED_DSSETSAMPLERS, /* samplers_info */
@@ -269,7 +270,8 @@ static struct deferred_call *add_deferred_call(struct d3d11_deferred_context *co
return call;
}
-/* for DEFERRED_CSSETSHADERRESOURCES, DEFERRED_DSSETSHADERRESOURCES and DEFERRED_PSSETSHADERRESOURCES */
+/* for DEFERRED_CSSETSHADERRESOURCES, DEFERRED_DSSETSHADERRESOURCES, DEFERRED_GSSETSHADERRESOURCES,
+ * and DEFERRED_PSSETSHADERRESOURCES */
static void add_deferred_set_shader_resources(struct d3d11_deferred_context *context, enum deferred_cmd cmd,
UINT start_slot, UINT view_count, ID3D11ShaderResourceView *const *views)
{
@@ -438,6 +440,7 @@ static void free_deferred_calls(struct list *commands)
}
case DEFERRED_CSSETSHADERRESOURCES:
case DEFERRED_DSSETSHADERRESOURCES:
+ case DEFERRED_GSSETSHADERRESOURCES:
case DEFERRED_PSSETSHADERRESOURCES:
{
for (i = 0; i < call->res_info.num_views; i++)
@@ -625,6 +628,12 @@ static void exec_deferred_calls(ID3D11DeviceContext *iface, struct list *command
call->res_info.num_views, call->res_info.views);
break;
}
+ case DEFERRED_GSSETSHADERRESOURCES:
+ {
+ ID3D11DeviceContext_GSSetShaderResources(iface, call->res_info.start_slot,
+ call->res_info.num_views, call->res_info.views);
+ break;
+ }
case DEFERRED_PSSETSHADERRESOURCES:
{
ID3D11DeviceContext_PSSetShaderResources(iface, call->res_info.start_slot,
@@ -3984,7 +3993,12 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_SetPredication(ID3D11Device
static void STDMETHODCALLTYPE d3d11_deferred_context_GSSetShaderResources(ID3D11DeviceContext *iface,
UINT start_slot, UINT view_count, ID3D11ShaderResourceView *const *views)
{
- FIXME("iface %p, start_slot %u, view_count %u, views %p stub!\n", iface, start_slot, view_count, views);
+ struct d3d11_deferred_context *context = impl_from_deferred_ID3D11DeviceContext(iface);
+
+ TRACE("iface %p, start_slot %u, view_count %u, views %p.\n",
+ iface, start_slot, view_count, views);
+
+ add_deferred_set_shader_resources(context, DEFERRED_GSSETSHADERRESOURCES, start_slot, view_count, views);
}
static void STDMETHODCALLTYPE d3d11_deferred_context_GSSetSamplers(ID3D11DeviceContext *iface,
--
2.13.1

View File

@ -0,0 +1,68 @@
From 47adec4e3c5117ac8c2a9c5c48659298aff77003 Mon Sep 17 00:00:00 2001
From: Kimmo Myllyvirta <kimmo.myllyvirta@gmail.com>
Date: Fri, 7 Jul 2017 11:11:41 +0300
Subject: d3d11: Implement HSSetShaderResources for deferred contexts.
---
dlls/d3d11/device.c | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index 917101d055c..f2ed01bf532 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -50,6 +50,7 @@ enum deferred_cmd
DEFERRED_CSSETSHADERRESOURCES, /* res_info */
DEFERRED_DSSETSHADERRESOURCES, /* res_info */
DEFERRED_GSSETSHADERRESOURCES, /* res_info */
+ DEFERRED_HSSETSHADERRESOURCES, /* res_info */
DEFERRED_PSSETSHADERRESOURCES, /* res_info */
DEFERRED_DSSETSAMPLERS, /* samplers_info */
@@ -271,7 +272,7 @@ static struct deferred_call *add_deferred_call(struct d3d11_deferred_context *co
}
/* for DEFERRED_CSSETSHADERRESOURCES, DEFERRED_DSSETSHADERRESOURCES, DEFERRED_GSSETSHADERRESOURCES,
- * and DEFERRED_PSSETSHADERRESOURCES */
+ * DEFERRED_HSSETSHADERRESOURCES and DEFERRED_PSSETSHADERRESOURCES */
static void add_deferred_set_shader_resources(struct d3d11_deferred_context *context, enum deferred_cmd cmd,
UINT start_slot, UINT view_count, ID3D11ShaderResourceView *const *views)
{
@@ -441,6 +442,7 @@ static void free_deferred_calls(struct list *commands)
case DEFERRED_CSSETSHADERRESOURCES:
case DEFERRED_DSSETSHADERRESOURCES:
case DEFERRED_GSSETSHADERRESOURCES:
+ case DEFERRED_HSSETSHADERRESOURCES:
case DEFERRED_PSSETSHADERRESOURCES:
{
for (i = 0; i < call->res_info.num_views; i++)
@@ -634,6 +636,12 @@ static void exec_deferred_calls(ID3D11DeviceContext *iface, struct list *command
call->res_info.num_views, call->res_info.views);
break;
}
+ case DEFERRED_HSSETSHADERRESOURCES:
+ {
+ ID3D11DeviceContext_HSSetShaderResources(iface, call->res_info.start_slot,
+ call->res_info.num_views, call->res_info.views);
+ break;
+ }
case DEFERRED_PSSETSHADERRESOURCES:
{
ID3D11DeviceContext_PSSetShaderResources(iface, call->res_info.start_slot,
@@ -4304,8 +4312,12 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_ExecuteCommandList(ID3D11De
static void STDMETHODCALLTYPE d3d11_deferred_context_HSSetShaderResources(ID3D11DeviceContext *iface,
UINT start_slot, UINT view_count, ID3D11ShaderResourceView *const *views)
{
- FIXME("iface %p, start_slot %u, view_count %u, views %p stub!\n",
+ struct d3d11_deferred_context *context = impl_from_deferred_ID3D11DeviceContext(iface);
+
+ TRACE("iface %p, start_slot %u, view_count %u, views %p.\n",
iface, start_slot, view_count, views);
+
+ add_deferred_set_shader_resources(context, DEFERRED_HSSETSHADERRESOURCES, start_slot, view_count, views);
}
static void STDMETHODCALLTYPE d3d11_deferred_context_HSSetShader(ID3D11DeviceContext *iface,
--
2.13.1

View File

@ -0,0 +1,68 @@
From 5fb7380f08a868c176d6c369e9390ff64274aa6e Mon Sep 17 00:00:00 2001
From: Kimmo Myllyvirta <kimmo.myllyvirta@gmail.com>
Date: Fri, 7 Jul 2017 11:13:47 +0300
Subject: d3d11: Implement VSSetShaderResources for deferred contexts.
---
dlls/d3d11/device.c | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index f2ed01bf532..c4cef99ba26 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -52,6 +52,7 @@ enum deferred_cmd
DEFERRED_GSSETSHADERRESOURCES, /* res_info */
DEFERRED_HSSETSHADERRESOURCES, /* res_info */
DEFERRED_PSSETSHADERRESOURCES, /* res_info */
+ DEFERRED_VSSETSHADERRESOURCES, /* res_info */
DEFERRED_DSSETSAMPLERS, /* samplers_info */
DEFERRED_PSSETSAMPLERS, /* samplers_info */
@@ -272,7 +273,7 @@ static struct deferred_call *add_deferred_call(struct d3d11_deferred_context *co
}
/* for DEFERRED_CSSETSHADERRESOURCES, DEFERRED_DSSETSHADERRESOURCES, DEFERRED_GSSETSHADERRESOURCES,
- * DEFERRED_HSSETSHADERRESOURCES and DEFERRED_PSSETSHADERRESOURCES */
+ * DEFERRED_HSSETSHADERRESOURCES, DEFERRED_PSSETSHADERRESOURCES and DEFERRED_VSSETSHADERRESOURCES */
static void add_deferred_set_shader_resources(struct d3d11_deferred_context *context, enum deferred_cmd cmd,
UINT start_slot, UINT view_count, ID3D11ShaderResourceView *const *views)
{
@@ -444,6 +445,7 @@ static void free_deferred_calls(struct list *commands)
case DEFERRED_GSSETSHADERRESOURCES:
case DEFERRED_HSSETSHADERRESOURCES:
case DEFERRED_PSSETSHADERRESOURCES:
+ case DEFERRED_VSSETSHADERRESOURCES:
{
for (i = 0; i < call->res_info.num_views; i++)
{
@@ -648,6 +650,12 @@ static void exec_deferred_calls(ID3D11DeviceContext *iface, struct list *command
call->res_info.num_views, call->res_info.views);
break;
}
+ case DEFERRED_VSSETSHADERRESOURCES:
+ {
+ ID3D11DeviceContext_VSSetShaderResources(iface, call->res_info.start_slot,
+ call->res_info.num_views, call->res_info.views);
+ break;
+ }
case DEFERRED_DSSETSAMPLERS:
{
ID3D11DeviceContext_DSSetSamplers(iface, call->samplers_info.start_slot,
@@ -3961,7 +3969,12 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_IASetPrimitiveTopology(ID3D
static void STDMETHODCALLTYPE d3d11_deferred_context_VSSetShaderResources(ID3D11DeviceContext *iface,
UINT start_slot, UINT view_count, ID3D11ShaderResourceView *const *views)
{
- FIXME("iface %p, start_slot %u, view_count %u, views %p stub!\n", iface, start_slot, view_count, views);
+ struct d3d11_deferred_context *context = impl_from_deferred_ID3D11DeviceContext(iface);
+
+ TRACE("iface %p, start_slot %u, view_count %u, views %p.\n",
+ iface, start_slot, view_count, views);
+
+ add_deferred_set_shader_resources(context, DEFERRED_VSSETSHADERRESOURCES, start_slot, view_count, views);
}
static void STDMETHODCALLTYPE d3d11_deferred_context_VSSetSamplers(ID3D11DeviceContext *iface,
--
2.13.1

View File

@ -0,0 +1,68 @@
From ebe0004e3acb6b89d649756bc27b32b92ee3d540 Mon Sep 17 00:00:00 2001
From: Kimmo Myllyvirta <kimmo.myllyvirta@gmail.com>
Date: Fri, 7 Jul 2017 11:15:31 +0300
Subject: d3d11: Implement CSSetSamplers for deferred contexts.
---
dlls/d3d11/device.c | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index c4cef99ba26..1fe04efa5c3 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -54,6 +54,7 @@ enum deferred_cmd
DEFERRED_PSSETSHADERRESOURCES, /* res_info */
DEFERRED_VSSETSHADERRESOURCES, /* res_info */
+ DEFERRED_CSSETSAMPLERS, /* samplers_info */
DEFERRED_DSSETSAMPLERS, /* samplers_info */
DEFERRED_PSSETSAMPLERS, /* samplers_info */
@@ -294,7 +295,7 @@ static void add_deferred_set_shader_resources(struct d3d11_deferred_context *con
}
}
-/* for DEFERRED_DSSETSAMPLERS and DEFERRED_PSSETSAMPLERS */
+/* for DEFERRED_CSSETSAMPLERS, DEFERRED_DSSETSAMPLERS and DEFERRED_PSSETSAMPLERS */
static void add_deferred_set_samplers(struct d3d11_deferred_context *context, enum deferred_cmd cmd,
UINT start_slot, UINT sampler_count, ID3D11SamplerState *const *samplers)
{
@@ -454,6 +455,7 @@ static void free_deferred_calls(struct list *commands)
}
break;
}
+ case DEFERRED_CSSETSAMPLERS:
case DEFERRED_DSSETSAMPLERS:
case DEFERRED_PSSETSAMPLERS:
{
@@ -656,6 +658,12 @@ static void exec_deferred_calls(ID3D11DeviceContext *iface, struct list *command
call->res_info.num_views, call->res_info.views);
break;
}
+ case DEFERRED_CSSETSAMPLERS:
+ {
+ ID3D11DeviceContext_CSSetSamplers(iface, call->samplers_info.start_slot,
+ call->samplers_info.num_samplers, call->samplers_info.samplers);
+ break;
+ }
case DEFERRED_DSSETSAMPLERS:
{
ID3D11DeviceContext_DSSetSamplers(iface, call->samplers_info.start_slot,
@@ -4475,8 +4483,12 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_CSSetShader(ID3D11DeviceCon
static void STDMETHODCALLTYPE d3d11_deferred_context_CSSetSamplers(ID3D11DeviceContext *iface,
UINT start_slot, UINT sampler_count, ID3D11SamplerState *const *samplers)
{
- FIXME("iface %p, start_slot %u, sampler_count %u, samplers %p stub!\n",
+ struct d3d11_deferred_context *context = impl_from_deferred_ID3D11DeviceContext(iface);
+
+ TRACE("iface %p, start_slot %u, sampler_count %u, samplers %p.\n",
iface, start_slot, sampler_count, samplers);
+
+ add_deferred_set_samplers(context, DEFERRED_CSSETSAMPLERS, start_slot, sampler_count, samplers);
}
static void STDMETHODCALLTYPE d3d11_deferred_context_CSSetConstantBuffers(ID3D11DeviceContext *iface,
--
2.13.1

View File

@ -0,0 +1,69 @@
From 68c90b8a153575c328197c9d18dfee3a8f88fb37 Mon Sep 17 00:00:00 2001
From: Kimmo Myllyvirta <kimmo.myllyvirta@gmail.com>
Date: Fri, 7 Jul 2017 11:19:27 +0300
Subject: d3d11: Implement GSSetSamplers for deferred contexts.
---
dlls/d3d11/device.c | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index 1fe04efa5c3..1af93c4a99a 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -56,6 +56,7 @@ enum deferred_cmd
DEFERRED_CSSETSAMPLERS, /* samplers_info */
DEFERRED_DSSETSAMPLERS, /* samplers_info */
+ DEFERRED_GSSETSAMPLERS, /* samplers_info */
DEFERRED_PSSETSAMPLERS, /* samplers_info */
DEFERRED_CSSETCONSTANTBUFFERS, /* constant_buffers_info */
@@ -295,7 +296,8 @@ static void add_deferred_set_shader_resources(struct d3d11_deferred_context *con
}
}
-/* for DEFERRED_CSSETSAMPLERS, DEFERRED_DSSETSAMPLERS and DEFERRED_PSSETSAMPLERS */
+/* for DEFERRED_CSSETSAMPLERS, DEFERRED_DSSETSAMPLERS, DEFERRED_GSSETSAMPLERS and
+ * DEFERRED_PSSETSAMPLERS */
static void add_deferred_set_samplers(struct d3d11_deferred_context *context, enum deferred_cmd cmd,
UINT start_slot, UINT sampler_count, ID3D11SamplerState *const *samplers)
{
@@ -457,6 +459,7 @@ static void free_deferred_calls(struct list *commands)
}
case DEFERRED_CSSETSAMPLERS:
case DEFERRED_DSSETSAMPLERS:
+ case DEFERRED_GSSETSAMPLERS:
case DEFERRED_PSSETSAMPLERS:
{
for (i = 0; i < call->samplers_info.num_samplers; i++)
@@ -670,6 +673,12 @@ static void exec_deferred_calls(ID3D11DeviceContext *iface, struct list *command
call->samplers_info.num_samplers, call->samplers_info.samplers);
break;
}
+ case DEFERRED_GSSETSAMPLERS:
+ {
+ ID3D11DeviceContext_GSSetSamplers(iface, call->samplers_info.start_slot,
+ call->samplers_info.num_samplers, call->samplers_info.samplers);
+ break;
+ }
case DEFERRED_PSSETSAMPLERS:
{
ID3D11DeviceContext_PSSetSamplers(iface, call->samplers_info.start_slot,
@@ -4033,8 +4042,12 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_GSSetShaderResources(ID3D11
static void STDMETHODCALLTYPE d3d11_deferred_context_GSSetSamplers(ID3D11DeviceContext *iface,
UINT start_slot, UINT sampler_count, ID3D11SamplerState *const *samplers)
{
- FIXME("iface %p, start_slot %u, sampler_count %u, samplers %p stub!\n",
+ struct d3d11_deferred_context *context = impl_from_deferred_ID3D11DeviceContext(iface);
+
+ TRACE("iface %p, start_slot %u, sampler_count %u, samplers %p.\n",
iface, start_slot, sampler_count, samplers);
+
+ add_deferred_set_samplers(context, DEFERRED_GSSETSAMPLERS, start_slot, sampler_count, samplers);
}
static void STDMETHODCALLTYPE d3d11_deferred_context_OMSetRenderTargets(ID3D11DeviceContext *iface,
--
2.13.1

View File

@ -0,0 +1,70 @@
From 31741559091edb33262d99539c25c8083ec9da7a Mon Sep 17 00:00:00 2001
From: Kimmo Myllyvirta <kimmo.myllyvirta@gmail.com>
Date: Fri, 7 Jul 2017 11:21:32 +0300
Subject: d3d11: Implement HSSetSamplers for deferred contexts.
---
dlls/d3d11/device.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index 1af93c4a99a..1408cf9450b 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -57,6 +57,7 @@ enum deferred_cmd
DEFERRED_CSSETSAMPLERS, /* samplers_info */
DEFERRED_DSSETSAMPLERS, /* samplers_info */
DEFERRED_GSSETSAMPLERS, /* samplers_info */
+ DEFERRED_HSSETSAMPLERS, /* samplers_info */
DEFERRED_PSSETSAMPLERS, /* samplers_info */
DEFERRED_CSSETCONSTANTBUFFERS, /* constant_buffers_info */
@@ -296,8 +297,8 @@ static void add_deferred_set_shader_resources(struct d3d11_deferred_context *con
}
}
-/* for DEFERRED_CSSETSAMPLERS, DEFERRED_DSSETSAMPLERS, DEFERRED_GSSETSAMPLERS and
- * DEFERRED_PSSETSAMPLERS */
+/* for DEFERRED_CSSETSAMPLERS, DEFERRED_DSSETSAMPLERS, DEFERRED_GSSETSAMPLERS,
+ * DEFERRED_HSSETSAMPLERS and DEFERRED_PSSETSAMPLERS */
static void add_deferred_set_samplers(struct d3d11_deferred_context *context, enum deferred_cmd cmd,
UINT start_slot, UINT sampler_count, ID3D11SamplerState *const *samplers)
{
@@ -460,6 +461,7 @@ static void free_deferred_calls(struct list *commands)
case DEFERRED_CSSETSAMPLERS:
case DEFERRED_DSSETSAMPLERS:
case DEFERRED_GSSETSAMPLERS:
+ case DEFERRED_HSSETSAMPLERS:
case DEFERRED_PSSETSAMPLERS:
{
for (i = 0; i < call->samplers_info.num_samplers; i++)
@@ -679,6 +681,12 @@ static void exec_deferred_calls(ID3D11DeviceContext *iface, struct list *command
call->samplers_info.num_samplers, call->samplers_info.samplers);
break;
}
+ case DEFERRED_HSSETSAMPLERS:
+ {
+ ID3D11DeviceContext_HSSetSamplers(iface, call->samplers_info.start_slot,
+ call->samplers_info.num_samplers, call->samplers_info.samplers);
+ break;
+ }
case DEFERRED_PSSETSAMPLERS:
{
ID3D11DeviceContext_PSSetSamplers(iface, call->samplers_info.start_slot,
@@ -4374,8 +4382,12 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_HSSetShader(ID3D11DeviceCon
static void STDMETHODCALLTYPE d3d11_deferred_context_HSSetSamplers(ID3D11DeviceContext *iface,
UINT start_slot, UINT sampler_count, ID3D11SamplerState *const *samplers)
{
- FIXME("iface %p, start_slot %u, sampler_count %u, samplers %p stub!\n",
+ struct d3d11_deferred_context *context = impl_from_deferred_ID3D11DeviceContext(iface);
+
+ TRACE("iface %p, start_slot %u, sampler_count %u, samplers %p.\n",
iface, start_slot, sampler_count, samplers);
+
+ add_deferred_set_samplers(context, DEFERRED_HSSETSAMPLERS, start_slot, sampler_count, samplers);
}
static void STDMETHODCALLTYPE d3d11_deferred_context_HSSetConstantBuffers(ID3D11DeviceContext *iface,
--
2.13.1

View File

@ -0,0 +1,68 @@
From 1b768487e7175cc29e2574c4334ee91d0333ce26 Mon Sep 17 00:00:00 2001
From: Kimmo Myllyvirta <kimmo.myllyvirta@gmail.com>
Date: Fri, 7 Jul 2017 11:23:51 +0300
Subject: d3d11: Implement VSSetSamplers for deferred contexts.
---
dlls/d3d11/device.c | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index 1408cf9450b..4327bc2bdbf 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -59,6 +59,7 @@ enum deferred_cmd
DEFERRED_GSSETSAMPLERS, /* samplers_info */
DEFERRED_HSSETSAMPLERS, /* samplers_info */
DEFERRED_PSSETSAMPLERS, /* samplers_info */
+ DEFERRED_VSSETSAMPLERS, /* samplers_info */
DEFERRED_CSSETCONSTANTBUFFERS, /* constant_buffers_info */
DEFERRED_DSSETCONSTANTBUFFERS, /* constant_buffers_info */
@@ -298,7 +299,7 @@ static void add_deferred_set_shader_resources(struct d3d11_deferred_context *con
}
/* for DEFERRED_CSSETSAMPLERS, DEFERRED_DSSETSAMPLERS, DEFERRED_GSSETSAMPLERS,
- * DEFERRED_HSSETSAMPLERS and DEFERRED_PSSETSAMPLERS */
+ * DEFERRED_HSSETSAMPLERS, DEFERRED_PSSETSAMPLERS and DEFERRED_VSSETSAMPLERS */
static void add_deferred_set_samplers(struct d3d11_deferred_context *context, enum deferred_cmd cmd,
UINT start_slot, UINT sampler_count, ID3D11SamplerState *const *samplers)
{
@@ -463,6 +464,7 @@ static void free_deferred_calls(struct list *commands)
case DEFERRED_GSSETSAMPLERS:
case DEFERRED_HSSETSAMPLERS:
case DEFERRED_PSSETSAMPLERS:
+ case DEFERRED_VSSETSAMPLERS:
{
for (i = 0; i < call->samplers_info.num_samplers; i++)
{
@@ -693,6 +695,12 @@ static void exec_deferred_calls(ID3D11DeviceContext *iface, struct list *command
call->samplers_info.num_samplers, call->samplers_info.samplers);
break;
}
+ case DEFERRED_VSSETSAMPLERS:
+ {
+ ID3D11DeviceContext_VSSetSamplers(iface, call->samplers_info.start_slot,
+ call->samplers_info.num_samplers, call->samplers_info.samplers);
+ break;
+ }
case DEFERRED_CSSETCONSTANTBUFFERS:
{
ID3D11DeviceContext_CSSetConstantBuffers(iface, call->constant_buffers_info.start_slot,
@@ -4005,8 +4013,12 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_VSSetShaderResources(ID3D11
static void STDMETHODCALLTYPE d3d11_deferred_context_VSSetSamplers(ID3D11DeviceContext *iface,
UINT start_slot, UINT sampler_count, ID3D11SamplerState *const *samplers)
{
- FIXME("iface %p, start_slot %u, sampler_count %u, samplers %p stub!\n",
+ struct d3d11_deferred_context *context = impl_from_deferred_ID3D11DeviceContext(iface);
+
+ TRACE("iface %p, start_slot %u, sampler_count %u, samplers %p.\n",
iface, start_slot, sampler_count, samplers);
+
+ add_deferred_set_samplers(context, DEFERRED_VSSETSAMPLERS, start_slot, sampler_count, samplers);
}
static void STDMETHODCALLTYPE d3d11_deferred_context_Begin(ID3D11DeviceContext *iface,
--
2.13.1

View File

@ -0,0 +1,104 @@
From 091d543f73d5c2ec0883bc575c9d1366e61e7d1f Mon Sep 17 00:00:00 2001
From: Kimmo Myllyvirta <kimmo.myllyvirta@gmail.com>
Date: Fri, 7 Jul 2017 11:26:21 +0300
Subject: d3d11: Implement Begin and End for deferred contexts.
---
dlls/d3d11/device.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 46 insertions(+), 2 deletions(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index 4327bc2bdbf..199307840a7 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -80,6 +80,9 @@ enum deferred_cmd
DEFERRED_CLEARSTATE,
DEFERRED_CLEARRENDERTARGETVIEW, /* clear_rtv_info */
DEFERRED_CLEARDEPTHSTENCILVIEW, /* clear_depth_info */
+
+ DEFERRED_BEGIN, /* async_info */
+ DEFERRED_END, /* async_info */
};
struct deferred_call
@@ -237,6 +240,10 @@ struct deferred_call
FLOAT depth;
UINT8 stencil;
} clear_depth_info;
+ struct
+ {
+ ID3D11Asynchronous *asynchronous;
+ } async_info;
};
};
@@ -527,6 +534,13 @@ static void free_deferred_calls(struct list *commands)
ID3D11DepthStencilView_Release(call->clear_depth_info.view);
break;
}
+ case DEFERRED_BEGIN:
+ case DEFERRED_END:
+ {
+ if (call->async_info.asynchronous)
+ ID3D11Asynchronous_Release(call->async_info.asynchronous);
+ break;
+ }
default:
{
FIXME("Unimplemented command type %u\n", call->cmd);
@@ -802,6 +816,16 @@ static void exec_deferred_calls(ID3D11DeviceContext *iface, struct list *command
call->clear_depth_info.stencil);
break;
}
+ case DEFERRED_BEGIN:
+ {
+ ID3D11DeviceContext_Begin(iface, call->async_info.asynchronous);
+ break;
+ }
+ case DEFERRED_END:
+ {
+ ID3D11DeviceContext_End(iface, call->async_info.asynchronous);
+ break;
+ }
default:
{
FIXME("Unimplemented command type %u\n", call->cmd);
@@ -4024,13 +4048,33 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_VSSetSamplers(ID3D11DeviceC
static void STDMETHODCALLTYPE d3d11_deferred_context_Begin(ID3D11DeviceContext *iface,
ID3D11Asynchronous *asynchronous)
{
- FIXME("iface %p, asynchronous %p stub!\n", iface, asynchronous);
+ struct d3d11_deferred_context *context = impl_from_deferred_ID3D11DeviceContext(iface);
+ struct deferred_call *call;
+
+ TRACE("iface %p, asynchronous %p.\n", iface, asynchronous);
+
+ if (!(call = add_deferred_call(context, 0)))
+ return;
+
+ call->cmd = DEFERRED_BEGIN;
+ if (asynchronous) ID3D11Asynchronous_AddRef(asynchronous);
+ call->async_info.asynchronous = asynchronous;
}
static void STDMETHODCALLTYPE d3d11_deferred_context_End(ID3D11DeviceContext *iface,
ID3D11Asynchronous *asynchronous)
{
- FIXME("iface %p, asynchronous %p stub!\n", iface, asynchronous);
+ struct d3d11_deferred_context *context = impl_from_deferred_ID3D11DeviceContext(iface);
+ struct deferred_call *call;
+
+ TRACE("iface %p, asynchronous %p.\n", iface, asynchronous);
+
+ if (!(call = add_deferred_call(context, 0)))
+ return;
+
+ call->cmd = DEFERRED_END;
+ if (asynchronous) ID3D11Asynchronous_AddRef(asynchronous);
+ call->async_info.asynchronous = asynchronous;
}
static HRESULT STDMETHODCALLTYPE d3d11_deferred_context_GetData(ID3D11DeviceContext *iface,
--
2.13.1

View File

@ -3410,6 +3410,17 @@ if test "$enable_d3d11_Deferred_Context" -eq 1; then
patch_apply d3d11-Deferred_Context/0008-d3d11-Implement-ClearRenderTargetView-for-deferred-c.patch
patch_apply d3d11-Deferred_Context/0009-d3d11-Implement-Draw-for-deferred-contexts.patch
patch_apply d3d11-Deferred_Context/0010-d3d11-Implement-ClearDepthStencilView-for-deferred-c.patch
patch_apply d3d11-Deferred_Context/0011-d3d11-Implement-GSSetShader-for-deferred-contexts.patch
patch_apply d3d11-Deferred_Context/0012-d3d11-Implement-GSSetConstantBuffers-for-deferred-co.patch
patch_apply d3d11-Deferred_Context/0013-d3d11-Implement-CSSetShaderResources-for-deferred-co.patch
patch_apply d3d11-Deferred_Context/0014-d3d11-Implement-GSSetShaderResources-for-deferred-co.patch
patch_apply d3d11-Deferred_Context/0015-d3d11-Implement-HSSetShaderResources-for-deferred-co.patch
patch_apply d3d11-Deferred_Context/0016-d3d11-Implement-VSSetShaderResources-for-deferred-co.patch
patch_apply d3d11-Deferred_Context/0017-d3d11-Implement-CSSetSamplers-for-deferred-contexts.patch
patch_apply d3d11-Deferred_Context/0018-d3d11-Implement-GSSetSamplers-for-deferred-contexts.patch
patch_apply d3d11-Deferred_Context/0019-d3d11-Implement-HSSetSamplers-for-deferred-contexts.patch
patch_apply d3d11-Deferred_Context/0020-d3d11-Implement-VSSetSamplers-for-deferred-contexts.patch
patch_apply d3d11-Deferred_Context/0021-d3d11-Implement-Begin-and-End-for-deferred-contexts.patch
(
printf '%s\n' '+ { "Kimmo Myllyvirta", "d3d11: Add stub deferred rendering context.", 1 },';
printf '%s\n' '+ { "Michael Müller", "wined3d: Add wined3d_resource_map_info function.", 1 },';
@ -3421,6 +3432,17 @@ if test "$enable_d3d11_Deferred_Context" -eq 1; then
printf '%s\n' '+ { "Michael Müller", "d3d11: Implement ClearRenderTargetView for deferred contexts.", 1 },';
printf '%s\n' '+ { "Michael Müller", "d3d11: Implement Draw for deferred contexts.", 1 },';
printf '%s\n' '+ { "Michael Müller", "d3d11: Implement ClearDepthStencilView for deferred contexts.", 1 },';
printf '%s\n' '+ { "Kimmo Myllyvirta", "d3d11: Implement GSSetShader for deferred contexts.", 1 },';
printf '%s\n' '+ { "Kimmo Myllyvirta", "d3d11: Implement GSSetConstantBuffers for deferred contexts.", 1 },';
printf '%s\n' '+ { "Kimmo Myllyvirta", "d3d11: Implement CSSetShaderResources for deferred contexts.", 1 },';
printf '%s\n' '+ { "Kimmo Myllyvirta", "d3d11: Implement GSSetShaderResources for deferred contexts.", 1 },';
printf '%s\n' '+ { "Kimmo Myllyvirta", "d3d11: Implement HSSetShaderResources for deferred contexts.", 1 },';
printf '%s\n' '+ { "Kimmo Myllyvirta", "d3d11: Implement VSSetShaderResources for deferred contexts.", 1 },';
printf '%s\n' '+ { "Kimmo Myllyvirta", "d3d11: Implement CSSetSamplers for deferred contexts.", 1 },';
printf '%s\n' '+ { "Kimmo Myllyvirta", "d3d11: Implement GSSetSamplers for deferred contexts.", 1 },';
printf '%s\n' '+ { "Kimmo Myllyvirta", "d3d11: Implement HSSetSamplers for deferred contexts.", 1 },';
printf '%s\n' '+ { "Kimmo Myllyvirta", "d3d11: Implement VSSetSamplers for deferred contexts.", 1 },';
printf '%s\n' '+ { "Kimmo Myllyvirta", "d3d11: Implement Begin and End for deferred contexts.", 1 },';
) >> "$patchlist"
fi