[PATCH 0/5] MR9879: wined3d: Various.
From: Elizabeth Figura <zfigura@codeweavers.com> --- dlls/wined3d/texture_vk.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/dlls/wined3d/texture_vk.c b/dlls/wined3d/texture_vk.c index 3148a5c7b95..88d83e3f7f4 100644 --- a/dlls/wined3d/texture_vk.c +++ b/dlls/wined3d/texture_vk.c @@ -1488,6 +1488,21 @@ static void vk_blitter_clear(struct wined3d_blitter *blitter, struct wined3d_dev clear_rects, draw_rect, next_flags, colour, depth, stencil); } +static bool vk_blitter_conversion_supported(enum wined3d_blit_op op, const struct wined3d_format *src_format, + const struct wined3d_format *dst_format, const struct wined3d_format *resolve_format) +{ + if (op == WINED3D_BLIT_OP_RAW_BLIT) + return true; + + if (wined3d_format_is_typeless(src_format) || wined3d_format_is_typeless(dst_format)) + return true; + + if (resolve_format) + return true; + + return false; +} + static bool vk_blitter_blit_supported(enum wined3d_blit_op op, const struct wined3d_context *context, const struct wined3d_resource *src_resource, const RECT *src_rect, const struct wined3d_resource *dst_resource, const RECT *dst_rect, const struct wined3d_format *resolve_format) @@ -1521,10 +1536,8 @@ static bool vk_blitter_blit_supported(enum wined3d_blit_op op, const struct wine return false; } - if (op != WINED3D_BLIT_OP_RAW_BLIT - && wined3d_format_vk(src_format)->vk_format != wined3d_format_vk(dst_format)->vk_format - && ((!wined3d_format_is_typeless(src_format) && !wined3d_format_is_typeless(dst_format)) - || !resolve_format)) + if (wined3d_format_vk(src_format)->vk_format != wined3d_format_vk(dst_format)->vk_format + && !vk_blitter_conversion_supported(op, src_format, dst_format, resolve_format)) { TRACE("Format conversion not supported.\n"); return false; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9879
From: Elizabeth Figura <zfigura@codeweavers.com> --- dlls/wined3d/adapter_vk.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dlls/wined3d/adapter_vk.c b/dlls/wined3d/adapter_vk.c index 86f7971fda7..f54b8dae44d 100644 --- a/dlls/wined3d/adapter_vk.c +++ b/dlls/wined3d/adapter_vk.c @@ -474,6 +474,13 @@ static void adapter_vk_destroy_device(struct wined3d_device *device) { struct wined3d_device_vk *device_vk = wined3d_device_vk(device); const struct wined3d_vk_info *vk_info = &device_vk->vk_info; + struct wined3d *wined3d = device->wined3d; + + /* We need the adapter (which holds the reference to the Vulkan library) + * to stick around until we are done making Vulkan calls. + * wined3d_device_cleanup() might drop the last reference, + * so grab another one here. */ + wined3d_incref(wined3d); wined3d_device_cleanup(&device_vk->d); wined3d_allocator_cleanup(&device_vk->allocator); @@ -481,6 +488,7 @@ static void adapter_vk_destroy_device(struct wined3d_device *device) wined3d_lock_cleanup(&device_vk->allocator_cs); VK_CALL(vkDestroyDevice(device_vk->vk_device, NULL)); + wined3d_decref(wined3d); free(device_vk); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9879
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
From: Elizabeth Figura <zfigura@codeweavers.com> --- dlls/wined3d/shader_spirv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dlls/wined3d/shader_spirv.c b/dlls/wined3d/shader_spirv.c index 09880f0ea26..9d3dc2b2650 100644 --- a/dlls/wined3d/shader_spirv.c +++ b/dlls/wined3d/shader_spirv.c @@ -1190,7 +1190,7 @@ static void shader_spirv_get_caps(const struct wined3d_adapter *adapter, struct caps->vs_uniform_count = WINED3D_MAX_VS_CONSTS_F; caps->ps_uniform_count = WINED3D_MAX_PS_CONSTS_F; caps->ps_1x_max_value = FLT_MAX; - caps->varying_count = 0; + caps->varying_count = wined3d_adapter_vk_const(adapter)->device_limits.maxFragmentInputComponents; caps->wined3d_caps = WINED3D_SHADER_CAP_FULL_FFP_VARYINGS; } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9879
From: Elizabeth Figura <zfigura@codeweavers.com> --- dlls/wined3d/adapter_vk.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dlls/wined3d/adapter_vk.c b/dlls/wined3d/adapter_vk.c index 57eeec56d0f..131d197ce7a 100644 --- a/dlls/wined3d/adapter_vk.c +++ b/dlls/wined3d/adapter_vk.c @@ -2122,7 +2122,7 @@ static VkPhysicalDevice get_vulkan_physical_device(struct wined3d_vk_info *vk_in if (count > 1) { /* TODO: Create wined3d_adapter for each device. */ - FIXME("Multiple physical devices available.\n"); + WARN("Multiple physical devices available.\n"); count = 1; } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9879
participants (2)
-
Elizabeth Figura -
Elizabeth Figura (@zfigura)