From: Elizabeth Figura <zfigura@codeweavers.com> --- dlls/wined3d/adapter_vk.c | 5 ----- dlls/wined3d/shader_spirv.c | 41 +++++++++++++++++++++++++++++++++++++ dlls/wined3d/wined3d_vk.h | 6 ++++++ 3 files changed, 47 insertions(+), 5 deletions(-) diff --git a/dlls/wined3d/adapter_vk.c b/dlls/wined3d/adapter_vk.c index f54b8dae44d..57eeec56d0f 100644 --- a/dlls/wined3d/adapter_vk.c +++ b/dlls/wined3d/adapter_vk.c @@ -59,11 +59,6 @@ static const struct wined3d_state_entry_template misc_state_template_vk[] = {0}, /* Terminate */ }; -static inline const struct wined3d_adapter_vk *wined3d_adapter_vk_const(const struct wined3d_adapter *adapter) -{ - return CONTAINING_RECORD(adapter, struct wined3d_adapter_vk, a); -} - static const char *debug_vk_version(uint32_t version) { return wine_dbg_sprintf("%u.%u.%u", diff --git a/dlls/wined3d/shader_spirv.c b/dlls/wined3d/shader_spirv.c index d5fa401fad1..09880f0ea26 100644 --- a/dlls/wined3d/shader_spirv.c +++ b/dlls/wined3d/shader_spirv.c @@ -1248,6 +1248,19 @@ static void spirv_vertex_pipe_vk_vp_get_caps(const struct wined3d_adapter *adapt { memset(caps, 0, sizeof(*caps)); caps->emulated_flatshading = true; + caps->max_active_lights = WINED3D_MAX_ACTIVE_LIGHTS; + caps->max_vertex_blend_matrices = MAX_VERTEX_BLENDS; + caps->max_vertex_blend_matrix_index = 0; + caps->vertex_processing_caps = WINED3DVTXPCAPS_TEXGEN + | WINED3DVTXPCAPS_MATERIALSOURCE7 + | WINED3DVTXPCAPS_VERTEXFOG + | WINED3DVTXPCAPS_DIRECTIONALLIGHTS + | WINED3DVTXPCAPS_POSITIONALLIGHTS + | WINED3DVTXPCAPS_LOCALVIEWER + | WINED3DVTXPCAPS_TEXGEN_SPHEREMAP; + caps->fvf_caps = WINED3DFVFCAPS_PSIZE | 8; /* 8 texture coordinates. */ + caps->max_user_clip_planes = wined3d_adapter_vk_const(adapter)->device_limits.maxClipDistances; + caps->raster_caps = WINED3DPRASTERCAPS_FOGRANGE; } static unsigned int spirv_vertex_pipe_vk_vp_get_emul_mask(const struct wined3d_adapter *adapter) @@ -1307,7 +1320,35 @@ static void spirv_fragment_pipe_vk_fp_disable(const struct wined3d_context *cont static void spirv_fragment_pipe_vk_fp_get_caps(const struct wined3d_adapter *adapter, struct fragment_caps *caps) { memset(caps, 0, sizeof(*caps)); + caps->PrimitiveMiscCaps = WINED3DPMISCCAPS_TSSARGTEMP + | WINED3DPMISCCAPS_PERSTAGECONSTANT; + caps->TextureOpCaps = WINED3DTEXOPCAPS_DISABLE + | WINED3DTEXOPCAPS_SELECTARG1 + | WINED3DTEXOPCAPS_SELECTARG2 + | WINED3DTEXOPCAPS_MODULATE4X + | WINED3DTEXOPCAPS_MODULATE2X + | WINED3DTEXOPCAPS_MODULATE + | WINED3DTEXOPCAPS_ADDSIGNED2X + | WINED3DTEXOPCAPS_ADDSIGNED + | WINED3DTEXOPCAPS_ADD + | WINED3DTEXOPCAPS_SUBTRACT + | WINED3DTEXOPCAPS_ADDSMOOTH + | WINED3DTEXOPCAPS_BLENDCURRENTALPHA + | WINED3DTEXOPCAPS_BLENDFACTORALPHA + | WINED3DTEXOPCAPS_BLENDTEXTUREALPHA + | WINED3DTEXOPCAPS_BLENDDIFFUSEALPHA + | WINED3DTEXOPCAPS_BLENDTEXTUREALPHAPM + | WINED3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR + | WINED3DTEXOPCAPS_MODULATECOLOR_ADDALPHA + | WINED3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA + | WINED3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR + | WINED3DTEXOPCAPS_DOTPRODUCT3 + | WINED3DTEXOPCAPS_MULTIPLYADD + | WINED3DTEXOPCAPS_LERP + | WINED3DTEXOPCAPS_BUMPENVMAP + | WINED3DTEXOPCAPS_BUMPENVMAPLUMINANCE; caps->max_blend_stages = WINED3D_MAX_FFP_TEXTURES; + caps->max_textures = WINED3D_MAX_FFP_TEXTURES; } static unsigned int spirv_fragment_pipe_vk_fp_get_emul_mask(const struct wined3d_adapter *adapter) diff --git a/dlls/wined3d/wined3d_vk.h b/dlls/wined3d/wined3d_vk.h index 6fcfe2afbf2..a0f167ea17a 100644 --- a/dlls/wined3d/wined3d_vk.h +++ b/dlls/wined3d/wined3d_vk.h @@ -279,6 +279,7 @@ struct wined3d_vk_info BOOL supported[WINED3D_VK_EXT_COUNT]; HMODULE vulkan_lib; + uint32_t max_clip_distances; bool multiple_viewports; bool dynamic_state2; bool dynamic_patch_vertex_count; @@ -814,6 +815,11 @@ static inline struct wined3d_adapter_vk *wined3d_adapter_vk(struct wined3d_adapt return CONTAINING_RECORD(adapter, struct wined3d_adapter_vk, a); } +static inline const struct wined3d_adapter_vk *wined3d_adapter_vk_const(const struct wined3d_adapter *adapter) +{ + return CONTAINING_RECORD(adapter, struct wined3d_adapter_vk, a); +} + void adapter_vk_copy_bo_address(struct wined3d_context *context, const struct wined3d_bo_address *dst, const struct wined3d_bo_address *src, unsigned int range_count, const struct wined3d_range *ranges, uint32_t map_flags); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9879