[PATCH 4/7] wined3d: Introduce a (stub) SPIR-V fixed-function fragment pipe implementation.
Henri Verbeet
hverbeet at codeweavers.com
Mon May 18 10:52:48 CDT 2020
From: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
dlls/wined3d/adapter_vk.c | 2 +-
dlls/wined3d/shader_spirv.c | 82 ++++++++++++++++++++++++++++++++++
dlls/wined3d/wined3d_private.h | 2 +
3 files changed, 85 insertions(+), 1 deletion(-)
diff --git a/dlls/wined3d/adapter_vk.c b/dlls/wined3d/adapter_vk.c
index 74231652683..253c3da7264 100644
--- a/dlls/wined3d/adapter_vk.c
+++ b/dlls/wined3d/adapter_vk.c
@@ -1939,7 +1939,7 @@ static BOOL wined3d_adapter_vk_init(struct wined3d_adapter_vk *adapter_vk,
goto fail_vulkan;
adapter->vertex_pipe = wined3d_spirv_vertex_pipe_init_vk();
- adapter->fragment_pipe = &none_fragment_pipe;
+ adapter->fragment_pipe = wined3d_spirv_fragment_pipe_init_vk();
adapter->misc_state_template = misc_state_template_vk;
adapter->shader_backend = wined3d_spirv_shader_backend_init_vk();
diff --git a/dlls/wined3d/shader_spirv.c b/dlls/wined3d/shader_spirv.c
index fc43ec33f93..2dc07b14f1d 100644
--- a/dlls/wined3d/shader_spirv.c
+++ b/dlls/wined3d/shader_spirv.c
@@ -581,3 +581,85 @@ const struct wined3d_vertex_pipe_ops *wined3d_spirv_vertex_pipe_init_vk(void)
{
return &spirv_vertex_pipe_vk;
}
+
+static void spirv_fragment_pipe_vk_fp_enable(const struct wined3d_context *context, BOOL enable)
+{
+ /* Nothing to do. */
+}
+
+static void spirv_fragment_pipe_vk_fp_get_caps(const struct wined3d_adapter *adapter, struct fragment_caps *caps)
+{
+ memset(caps, 0, sizeof(*caps));
+}
+
+static uint32_t spirv_fragment_pipe_vk_fp_get_emul_mask(const struct wined3d_gl_info *gl_info)
+{
+ return 0;
+}
+
+static void *spirv_fragment_pipe_vk_fp_alloc(const struct wined3d_shader_backend_ops *shader_backend, void *shader_priv)
+{
+ if (shader_backend != &spirv_shader_backend_vk)
+ {
+ FIXME("SPIR-V fragment pipe without SPIR-V shader backend not implemented.\n");
+ return NULL;
+ }
+
+ return shader_priv;
+}
+
+static void spirv_fragment_pipe_vk_fp_free(struct wined3d_device *device, struct wined3d_context *context)
+{
+ /* Nothing to do. */
+}
+
+static BOOL spirv_fragment_pipe_vk_fp_alloc_context_data(struct wined3d_context *context)
+{
+ return TRUE;
+}
+
+static void spirv_fragment_pipe_vk_fp_free_context_data(struct wined3d_context *context)
+{
+ /* Nothing to do. */
+}
+
+static const struct wined3d_state_entry_template spirv_fragment_pipe_vk_fp_states[] =
+{
+ {STATE_RENDER(WINED3D_RS_SHADEMODE), {STATE_RENDER(WINED3D_RS_SHADEMODE), state_nop}},
+ {STATE_RENDER(WINED3D_RS_ALPHATESTENABLE), {STATE_RENDER(WINED3D_RS_ALPHATESTENABLE), state_nop}},
+ {STATE_RENDER(WINED3D_RS_ALPHAREF), {STATE_RENDER(WINED3D_RS_ALPHAREF), state_nop}},
+ {STATE_RENDER(WINED3D_RS_ALPHAFUNC), {STATE_RENDER(WINED3D_RS_ALPHAFUNC), state_nop}},
+ {STATE_RENDER(WINED3D_RS_FOGENABLE), {STATE_RENDER(WINED3D_RS_FOGENABLE), state_nop}},
+ {STATE_RENDER(WINED3D_RS_SPECULARENABLE), {STATE_RENDER(WINED3D_RS_SPECULARENABLE), state_nop}},
+ {STATE_RENDER(WINED3D_RS_FOGCOLOR), {STATE_RENDER(WINED3D_RS_FOGCOLOR), state_nop}},
+ {STATE_RENDER(WINED3D_RS_FOGTABLEMODE), {STATE_RENDER(WINED3D_RS_FOGTABLEMODE), state_nop}},
+ {STATE_RENDER(WINED3D_RS_FOGSTART), {STATE_RENDER(WINED3D_RS_FOGSTART), state_nop}},
+ {STATE_RENDER(WINED3D_RS_FOGEND), {STATE_RENDER(WINED3D_RS_FOGEND), state_nop}},
+ {STATE_RENDER(WINED3D_RS_FOGDENSITY), {STATE_RENDER(WINED3D_RS_FOGDENSITY), state_nop}},
+ {STATE_RENDER(WINED3D_RS_COLORKEYENABLE), {STATE_RENDER(WINED3D_RS_COLORKEYENABLE), state_nop}},
+ {STATE_RENDER(WINED3D_RS_TEXTUREFACTOR), {STATE_RENDER(WINED3D_RS_TEXTUREFACTOR), state_nop}},
+ {STATE_RENDER(WINED3D_RS_FOGVERTEXMODE), {STATE_RENDER(WINED3D_RS_FOGVERTEXMODE), state_nop}},
+ {STATE_RENDER(WINED3D_RS_POINTSPRITEENABLE), {STATE_RENDER(WINED3D_RS_POINTSPRITEENABLE), state_nop}},
+ {STATE_RENDER(WINED3D_RS_SRGBWRITEENABLE), {STATE_RENDER(WINED3D_RS_SRGBWRITEENABLE), state_nop}},
+ {STATE_POINT_ENABLE, {STATE_POINT_ENABLE, state_nop}},
+ {STATE_COLOR_KEY, {STATE_COLOR_KEY, state_nop}},
+ {0}, /* Terminate */
+};
+
+static const struct wined3d_fragment_pipe_ops spirv_fragment_pipe_vk =
+{
+ .fp_enable = spirv_fragment_pipe_vk_fp_enable,
+ .get_caps = spirv_fragment_pipe_vk_fp_get_caps,
+ .get_emul_mask = spirv_fragment_pipe_vk_fp_get_emul_mask,
+ .alloc_private = spirv_fragment_pipe_vk_fp_alloc,
+ .free_private = spirv_fragment_pipe_vk_fp_free,
+ .allocate_context_data = spirv_fragment_pipe_vk_fp_alloc_context_data,
+ .free_context_data = spirv_fragment_pipe_vk_fp_free_context_data,
+ .color_fixup_supported = shader_spirv_color_fixup_supported,
+ .states = spirv_fragment_pipe_vk_fp_states,
+};
+
+const struct wined3d_fragment_pipe_ops *wined3d_spirv_fragment_pipe_init_vk(void)
+{
+ return &spirv_fragment_pipe_vk;
+}
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index ee0e3545c96..fff944f7773 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2513,6 +2513,8 @@ extern const struct wined3d_fragment_pipe_ops nvts_fragment_pipeline DECLSPEC_HI
extern const struct wined3d_fragment_pipe_ops nvrc_fragment_pipeline DECLSPEC_HIDDEN;
extern const struct wined3d_fragment_pipe_ops glsl_fragment_pipe DECLSPEC_HIDDEN;
+const struct wined3d_fragment_pipe_ops *wined3d_spirv_fragment_pipe_init_vk(void) DECLSPEC_HIDDEN;
+
extern const struct wined3d_vertex_pipe_ops none_vertex_pipe DECLSPEC_HIDDEN;
extern const struct wined3d_vertex_pipe_ops ffp_vertex_pipe DECLSPEC_HIDDEN;
extern const struct wined3d_vertex_pipe_ops glsl_vertex_pipe DECLSPEC_HIDDEN;
--
2.20.1
More information about the wine-devel
mailing list