Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
121ca10f
Commit
121ca10f
authored
Nov 06, 2022
by
Jacek Caban
Committed by
Alexandre Julliard
Nov 07, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winevulkan: Avoid unneeded copies in struct conversion functions.
parent
e3999da6
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
40 additions
and
49 deletions
+40
-49
make_vulkan
dlls/winevulkan/make_vulkan
+33
-22
vulkan_thunks.c
dlls/winevulkan/vulkan_thunks.c
+7
-27
No files found.
dlls/winevulkan/make_vulkan
View file @
121ca10f
...
...
@@ -1190,15 +1190,16 @@ class VkVariable(object):
# those functions will be defined prior to usage by the
# 'parent' param requiring conversion.
if
self
.
is_struct
():
struct
=
self
.
struct
is_const
=
self
.
is_const
()
if
self
.
is_pointer
()
else
parent_const
conversions
.
extend
(
s
elf
.
s
truct
.
get_conversions
(
unwrap
,
is_const
))
conversions
.
extend
(
struct
.
get_conversions
(
unwrap
,
is_const
))
for
conv
in
[
False
,
True
]:
if
s
elf
.
needs_conversion
(
conv
,
unwrap
,
Direction
.
INPUT
,
parent
_const
):
conversions
.
append
(
StructConversionFunction
(
s
elf
.
struct
,
Direction
.
INPUT
,
conv
,
unwrap
))
if
s
elf
.
needs_conversion
(
conv
,
unwrap
,
Direction
.
OUTPUT
,
parent
_const
):
conversions
.
append
(
StructConversionFunction
(
s
elf
.
struct
,
Direction
.
OUTPUT
,
conv
,
unwrap
))
if
s
truct
.
needs_conversion
(
conv
,
unwrap
,
Direction
.
INPUT
,
is
_const
):
conversions
.
append
(
StructConversionFunction
(
s
truct
,
Direction
.
INPUT
,
conv
,
unwrap
,
is_const
))
if
s
truct
.
needs_conversion
(
conv
,
unwrap
,
Direction
.
OUTPUT
,
is
_const
):
conversions
.
append
(
StructConversionFunction
(
s
truct
,
Direction
.
OUTPUT
,
conv
,
unwrap
,
is_const
))
if
self
.
is_static_array
()
or
self
.
is_dynamic_array
():
for
conv
in
[
False
,
True
]:
...
...
@@ -1613,13 +1614,7 @@ class VkParam(VkVariable):
""" Check if param needs conversion. """
if
self
.
is_struct
():
if
self
.
struct
.
needs_conversion
(
conv
,
unwrap
,
direction
,
self
.
is_const
()):
return
True
# we needs input conversion of structs containing struct chain even if it's returnedonly
if
direction
==
Direction
.
INPUT
and
(
"pNext"
in
self
.
struct
)
and
\
self
.
struct
.
needs_conversion
(
conv
,
unwrap
,
Direction
.
OUTPUT
,
self
.
is_const
()):
return
True
return
False
return
self
.
struct
.
needs_conversion
(
conv
,
unwrap
,
direction
,
self
.
is_const
())
if
self
.
is_handle
():
# non-array handles are handled inline in thunks
...
...
@@ -1922,6 +1917,10 @@ class VkStruct(Sequence):
continue
if
m
.
name
==
"pNext"
:
# we need input conversion of structs containing struct chain even if it's returnedonly
if
direction
==
Direction
.
INPUT
and
\
self
.
needs_conversion
(
conv
,
unwrap
,
Direction
.
OUTPUT
,
is_const
):
return
True
continue
# for non-pointer members, check for returnedonly and const attributes
...
...
@@ -2014,12 +2013,13 @@ class VkStruct(Sequence):
class
StructConversionFunction
(
object
):
def
__init__
(
self
,
struct
,
direction
,
conv
,
unwrap
):
def
__init__
(
self
,
struct
,
direction
,
conv
,
unwrap
,
const
):
self
.
direction
=
direction
self
.
operand
=
struct
self
.
type
=
struct
.
name
self
.
conv
=
conv
self
.
unwrap
=
unwrap
or
not
self
.
operand
.
needs_unwrapping
()
self
.
const
=
const
name
=
"convert_{0}_"
.
format
(
self
.
type
)
win_type
=
"win32"
if
self
.
conv
else
"win64"
...
...
@@ -2033,6 +2033,22 @@ class StructConversionFunction(object):
def
__eq__
(
self
,
other
):
return
self
.
name
==
other
.
name
def
member_needs_copy
(
self
,
struct
,
m
):
if
self
.
direction
==
Direction
.
OUTPUT
:
if
m
.
name
in
[
"sType"
,
"pNext"
]:
return
False
if
self
.
const
and
not
m
.
is_pointer
():
return
False
if
m
.
is_const
()
and
not
m
.
needs_conversion
(
self
.
conv
,
self
.
unwrap
,
Direction
.
OUTPUT
,
self
.
const
):
return
False
else
:
if
m
.
name
==
"pNext"
:
return
True
if
m
.
name
!=
"sType"
and
struct
.
returnedonly
and
not
m
.
needs_conversion
(
self
.
conv
,
self
.
unwrap
,
Direction
.
INPUT
,
self
.
const
):
return
False
return
True
def
definition
(
self
):
""" Helper function for generating a struct conversion function. """
...
...
@@ -2084,16 +2100,9 @@ class StructConversionFunction(object):
body
+=
" if (!in) return;
\n\n
"
if
self
.
direction
==
Direction
.
INPUT
and
"pNext"
in
self
.
operand
and
self
.
operand
.
returnedonly
:
# We are dealing with an input_output parameter. For these we only need to copy
# pNext and sType as the other fields are filled in by the host. We do potentially
# have to iterate over pNext and perform conversions based on switch(sType)!
# Luckily though no extension structs at this point need conversion.
# TODO: support copying of pNext extension structures!
body
+=
" out->pNext = in->pNext;
\n
"
body
+=
" out->sType = in->sType;
\n
"
else
:
for
m
in
self
.
operand
:
if
not
self
.
member_needs_copy
(
self
.
operand
,
m
):
continue
if
m
.
name
==
"pNext"
and
needs_extensions
:
body
+=
" out->pNext = NULL;
\n
"
continue
...
...
@@ -2142,6 +2151,8 @@ class StructConversionFunction(object):
if
m
.
name
==
"sType"
:
body
+=
ident
+
"out_ext->sType = {0};
\n
"
.
format
(
stype
)
continue
if
not
self
.
member_needs_copy
(
ext
,
m
):
continue
if
m
.
name
==
"pNext"
:
body
+=
ident
+
"out_ext->pNext = NULL;
\n
"
continue
...
...
dlls/winevulkan/vulkan_thunks.c
View file @
121ca10f
...
...
@@ -5626,8 +5626,6 @@ static inline void convert_VkAccelerationStructureBuildSizesInfoKHR_host_to_win3
{
if
(
!
in
)
return
;
out
->
sType
=
in
->
sType
;
out
->
pNext
=
in
->
pNext
;
out
->
accelerationStructureSize
=
in
->
accelerationStructureSize
;
out
->
updateScratchSize
=
in
->
updateScratchSize
;
out
->
buildScratchSize
=
in
->
buildScratchSize
;
...
...
@@ -5673,8 +5671,8 @@ static inline void convert_VkMemoryRequirements2KHR_win32_to_host(const VkMemory
{
if
(
!
in
)
return
;
out
->
pNext
=
in
->
pNext
;
out
->
sType
=
in
->
sType
;
out
->
pNext
=
in
->
pNext
;
}
#endif
/* USE_STRUCT_CONVERSION */
...
...
@@ -5683,8 +5681,6 @@ static inline void convert_VkMemoryRequirements2KHR_host_to_win32(const VkMemory
{
if
(
!
in
)
return
;
out
->
sType
=
in
->
sType
;
out
->
pNext
=
in
->
pNext
;
convert_VkMemoryRequirements_host_to_win32
(
&
in
->
memoryRequirements
,
&
out
->
memoryRequirements
);
}
#endif
/* USE_STRUCT_CONVERSION */
...
...
@@ -5716,8 +5712,8 @@ static inline void convert_VkMemoryRequirements2_win32_to_host(const VkMemoryReq
{
if
(
!
in
)
return
;
out
->
pNext
=
in
->
pNext
;
out
->
sType
=
in
->
sType
;
out
->
pNext
=
in
->
pNext
;
}
#endif
/* USE_STRUCT_CONVERSION */
...
...
@@ -5726,8 +5722,6 @@ static inline void convert_VkMemoryRequirements2_host_to_win32(const VkMemoryReq
{
if
(
!
in
)
return
;
out
->
sType
=
in
->
sType
;
out
->
pNext
=
in
->
pNext
;
convert_VkMemoryRequirements_host_to_win32
(
&
in
->
memoryRequirements
,
&
out
->
memoryRequirements
);
}
#endif
/* USE_STRUCT_CONVERSION */
...
...
@@ -5791,8 +5785,6 @@ static inline void convert_VkDeviceFaultCountsEXT_host_to_win32(const VkDeviceFa
{
if
(
!
in
)
return
;
out
->
sType
=
in
->
sType
;
out
->
pNext
=
in
->
pNext
;
out
->
addressInfoCount
=
in
->
addressInfoCount
;
out
->
vendorInfoCount
=
in
->
vendorInfoCount
;
out
->
vendorBinarySize
=
in
->
vendorBinarySize
;
...
...
@@ -5936,8 +5928,8 @@ static inline void convert_VkSubresourceLayout2EXT_win32_to_host(const VkSubreso
{
if
(
!
in
)
return
;
out
->
pNext
=
in
->
pNext
;
out
->
sType
=
in
->
sType
;
out
->
pNext
=
in
->
pNext
;
}
#endif
/* USE_STRUCT_CONVERSION */
...
...
@@ -5946,8 +5938,6 @@ static inline void convert_VkSubresourceLayout2EXT_host_to_win32(const VkSubreso
{
if
(
!
in
)
return
;
out
->
sType
=
in
->
sType
;
out
->
pNext
=
in
->
pNext
;
convert_VkSubresourceLayout_host_to_win32
(
&
in
->
subresourceLayout
,
&
out
->
subresourceLayout
);
}
#endif
/* USE_STRUCT_CONVERSION */
...
...
@@ -5957,8 +5947,8 @@ static inline void convert_VkImageViewAddressPropertiesNVX_win32_to_host(const V
{
if
(
!
in
)
return
;
out
->
pNext
=
in
->
pNext
;
out
->
sType
=
in
->
sType
;
out
->
pNext
=
in
->
pNext
;
}
#endif
/* USE_STRUCT_CONVERSION */
...
...
@@ -5967,8 +5957,6 @@ static inline void convert_VkImageViewAddressPropertiesNVX_host_to_win32(const V
{
if
(
!
in
)
return
;
out
->
sType
=
in
->
sType
;
out
->
pNext
=
in
->
pNext
;
out
->
deviceAddress
=
in
->
deviceAddress
;
out
->
size
=
in
->
size
;
}
...
...
@@ -6005,8 +5993,6 @@ static inline void convert_VkMicromapBuildSizesInfoEXT_host_to_win32(const VkMic
{
if
(
!
in
)
return
;
out
->
sType
=
in
->
sType
;
out
->
pNext
=
in
->
pNext
;
out
->
micromapSize
=
in
->
micromapSize
;
out
->
buildScratchSize
=
in
->
buildScratchSize
;
out
->
discardable
=
in
->
discardable
;
...
...
@@ -6031,8 +6017,8 @@ static inline void convert_VkImageFormatProperties2_win32_to_host(const VkImageF
{
if
(
!
in
)
return
;
out
->
pNext
=
in
->
pNext
;
out
->
sType
=
in
->
sType
;
out
->
pNext
=
in
->
pNext
;
}
#endif
/* USE_STRUCT_CONVERSION */
...
...
@@ -6041,8 +6027,6 @@ static inline void convert_VkImageFormatProperties2_host_to_win32(const VkImageF
{
if
(
!
in
)
return
;
out
->
sType
=
in
->
sType
;
out
->
pNext
=
in
->
pNext
;
convert_VkImageFormatProperties_host_to_win32
(
&
in
->
imageFormatProperties
,
&
out
->
imageFormatProperties
);
}
#endif
/* USE_STRUCT_CONVERSION */
...
...
@@ -6088,8 +6072,8 @@ static inline void convert_VkPhysicalDeviceMemoryProperties2_win32_to_host(const
{
if
(
!
in
)
return
;
out
->
pNext
=
in
->
pNext
;
out
->
sType
=
in
->
sType
;
out
->
pNext
=
in
->
pNext
;
}
#endif
/* USE_STRUCT_CONVERSION */
...
...
@@ -6098,8 +6082,6 @@ static inline void convert_VkPhysicalDeviceMemoryProperties2_host_to_win32(const
{
if
(
!
in
)
return
;
out
->
sType
=
in
->
sType
;
out
->
pNext
=
in
->
pNext
;
convert_VkPhysicalDeviceMemoryProperties_host_to_win32
(
&
in
->
memoryProperties
,
&
out
->
memoryProperties
);
}
#endif
/* USE_STRUCT_CONVERSION */
...
...
@@ -6240,8 +6222,8 @@ static inline void convert_VkPhysicalDeviceProperties2_win32_to_host(const VkPhy
{
if
(
!
in
)
return
;
out
->
pNext
=
in
->
pNext
;
out
->
sType
=
in
->
sType
;
out
->
pNext
=
in
->
pNext
;
}
#endif
/* USE_STRUCT_CONVERSION */
...
...
@@ -6250,8 +6232,6 @@ static inline void convert_VkPhysicalDeviceProperties2_host_to_win32(const VkPhy
{
if
(
!
in
)
return
;
out
->
sType
=
in
->
sType
;
out
->
pNext
=
in
->
pNext
;
convert_VkPhysicalDeviceProperties_host_to_win32
(
&
in
->
properties
,
&
out
->
properties
);
}
#endif
/* USE_STRUCT_CONVERSION */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment