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
46f84ea2
Commit
46f84ea2
authored
Nov 12, 2022
by
Jacek Caban
Committed by
Alexandre Julliard
Nov 18, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winevulkan: Always convert 32-bit pointer arrays.
parent
3eccac38
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
59 additions
and
19 deletions
+59
-19
make_vulkan
dlls/winevulkan/make_vulkan
+12
-11
vulkan_thunks.c
dlls/winevulkan/vulkan_thunks.c
+47
-8
No files found.
dlls/winevulkan/make_vulkan
View file @
46f84ea2
...
...
@@ -1306,10 +1306,6 @@ class VkVariable(object):
if
not
conv
or
not
self
.
needs_ptr32_type
()
or
(
not
self
.
is_pointer
()
and
self
.
type
==
"size_t"
):
return
prefix
+
self
.
name
# FIXME: Use conversion instead
if
self
.
name
in
[
"ppUsageCounts"
,
"ppEnabledLayerNames"
,
"ppEnabledExtensionNames"
]:
return
"UlongToPtr({0}{1})"
.
format
(
prefix
,
self
.
name
)
cast_type
=
""
if
self
.
const
:
cast_type
+=
"const "
...
...
@@ -1533,6 +1529,9 @@ class VkMember(VkVariable):
# returnedonly members don't needs input conversions
if
not
self
.
is_pointer
()
and
self
.
returnedonly
:
return
False
# pointer arrays always need input conversion
if
conv
and
self
.
is_dynamic_array
()
and
self
.
pointer_array
:
return
True
if
self
.
is_handle
():
if
unwrap
and
self
.
handle
.
is_wrapped
():
...
...
@@ -2457,21 +2456,21 @@ class ArrayConversionFunction(object):
body
+=
" convert_{0}_{1}({2}&in[i], &out[i]);
\n
"
.
format
(
struct
.
name
,
conv_suffix
,
ctx_part
)
else
:
body
+=
" if (in[i])
\n
"
body
+=
" {
\n
"
body
+=
" out[i] = conversion_context_alloc(ctx, sizeof(*out[i]));
\n
"
if
struct
.
needs_conversion
(
self
.
conv
,
self
.
unwrap
,
self
.
direction
,
False
):
body
+=
" if (in[i])
\n
"
body
+=
" {
\n
"
body
+=
" out[i] = conversion_context_alloc(ctx, sizeof(*out[i]));
\n
"
if
self
.
conv
:
in_param
=
"({0} *)UlongToPtr(in[i])"
.
format
(
win_type
)
else
:
in_param
=
"in[i]"
body
+=
" convert_{0}_{1}({2}{3}, out[i]);
\n
"
.
format
(
struct
.
name
,
conv_suffix
,
ctx_part
,
in_param
)
body
+=
" }
\n
"
body
+=
" else
\n
"
body
+=
" out[i] = NULL;
\n
"
else
:
body
+=
" *out[i] = *in[i];
\n
"
.
format
(
win_type
)
body
+=
" }
\n
"
body
+=
" else
\n
"
body
+=
" out[i] = NULL;
\n
"
body
+=
" out[i] = UlongToPtr(in[i]);
\n
"
.
format
(
win_type
)
elif
self
.
array
.
is_handle
():
if
self
.
array
.
pointer_array
:
LOGGER
.
error
(
"Unhandled handle pointer arrays"
)
...
...
@@ -2489,6 +2488,8 @@ class ArrayConversionFunction(object):
body
+=
" out[i] = "
+
handle
.
driver_handle
(
input
)
+
";
\n
"
else
:
LOGGER
.
warning
(
"Unhandled handle output conversion"
)
elif
self
.
array
.
pointer_array
:
body
+=
" out[i] = UlongToPtr(in[i]);
\n
"
else
:
body
+=
" out[i] = in[i];
\n
"
...
...
dlls/winevulkan/vulkan_thunks.c
View file @
46f84ea2
...
...
@@ -6485,7 +6485,25 @@ static inline const VkAccelerationStructureBuildGeometryInfoKHR *convert_VkAccel
#endif
/* USE_STRUCT_CONVERSION */
#if defined(USE_STRUCT_CONVERSION)
static
inline
void
convert_VkMicromapBuildInfoEXT_win32_to_host
(
const
VkMicromapBuildInfoEXT32
*
in
,
VkMicromapBuildInfoEXT
*
out
)
static
inline
const
VkMicromapUsageEXT
*
const
*
convert_VkMicromapUsageEXT_pointer_array_win32_to_host
(
struct
conversion_context
*
ctx
,
const
PTR32
*
in
,
uint32_t
count
)
{
VkMicromapUsageEXT
**
out
;
unsigned
int
i
;
if
(
!
in
||
!
count
)
return
NULL
;
out
=
conversion_context_alloc
(
ctx
,
count
*
sizeof
(
*
out
));
for
(
i
=
0
;
i
<
count
;
i
++
)
{
out
[
i
]
=
UlongToPtr
(
in
[
i
]);
}
return
(
void
*
)
out
;
}
#endif
/* USE_STRUCT_CONVERSION */
#if defined(USE_STRUCT_CONVERSION)
static
inline
void
convert_VkMicromapBuildInfoEXT_win32_to_host
(
struct
conversion_context
*
ctx
,
const
VkMicromapBuildInfoEXT32
*
in
,
VkMicromapBuildInfoEXT
*
out
)
{
if
(
!
in
)
return
;
...
...
@@ -6497,7 +6515,7 @@ static inline void convert_VkMicromapBuildInfoEXT_win32_to_host(const VkMicromap
out
->
dstMicromap
=
in
->
dstMicromap
;
out
->
usageCountsCount
=
in
->
usageCountsCount
;
out
->
pUsageCounts
=
(
const
VkMicromapUsageEXT
*
)
UlongToPtr
(
in
->
pUsageCounts
);
out
->
ppUsageCounts
=
UlongToPtr
(
in
->
ppUsageCounts
);
out
->
ppUsageCounts
=
convert_VkMicromapUsageEXT_pointer_array_win32_to_host
(
ctx
,
(
const
PTR32
*
)
UlongToPtr
(
in
->
ppUsageCounts
),
in
->
usageCountsCount
);
out
->
data
=
in
->
data
;
out
->
scratchData
=
in
->
scratchData
;
out
->
triangleArray
=
in
->
triangleArray
;
...
...
@@ -6516,7 +6534,7 @@ static inline const VkMicromapBuildInfoEXT *convert_VkMicromapBuildInfoEXT_array
out
=
conversion_context_alloc
(
ctx
,
count
*
sizeof
(
*
out
));
for
(
i
=
0
;
i
<
count
;
i
++
)
{
convert_VkMicromapBuildInfoEXT_win32_to_host
(
&
in
[
i
],
&
out
[
i
]);
convert_VkMicromapBuildInfoEXT_win32_to_host
(
ctx
,
&
in
[
i
],
&
out
[
i
]);
}
return
out
;
...
...
@@ -9156,6 +9174,24 @@ static inline const VkDeviceQueueCreateInfo *convert_VkDeviceQueueCreateInfo_arr
}
#endif
/* USE_STRUCT_CONVERSION */
#if defined(USE_STRUCT_CONVERSION)
static
inline
const
char
*
const
*
convert_char_pointer_array_win32_to_host
(
struct
conversion_context
*
ctx
,
const
PTR32
*
in
,
uint32_t
count
)
{
char
**
out
;
unsigned
int
i
;
if
(
!
in
||
!
count
)
return
NULL
;
out
=
conversion_context_alloc
(
ctx
,
count
*
sizeof
(
*
out
));
for
(
i
=
0
;
i
<
count
;
i
++
)
{
out
[
i
]
=
UlongToPtr
(
in
[
i
]);
}
return
(
void
*
)
out
;
}
#endif
/* USE_STRUCT_CONVERSION */
#if !defined(USE_STRUCT_CONVERSION)
static
inline
void
convert_VkDeviceCreateInfo_win64_to_host
(
struct
conversion_context
*
ctx
,
const
VkDeviceCreateInfo
*
in
,
VkDeviceCreateInfo
*
out
)
{
...
...
@@ -10985,9 +11021,9 @@ static inline void convert_VkDeviceCreateInfo_win32_to_host(struct conversion_co
out
->
queueCreateInfoCount
=
in
->
queueCreateInfoCount
;
out
->
pQueueCreateInfos
=
convert_VkDeviceQueueCreateInfo_array_win32_to_host
(
ctx
,
(
const
VkDeviceQueueCreateInfo32
*
)
UlongToPtr
(
in
->
pQueueCreateInfos
),
in
->
queueCreateInfoCount
);
out
->
enabledLayerCount
=
in
->
enabledLayerCount
;
out
->
ppEnabledLayerNames
=
UlongToPtr
(
in
->
ppEnabledLayerNames
);
out
->
ppEnabledLayerNames
=
convert_char_pointer_array_win32_to_host
(
ctx
,
(
const
PTR32
*
)
UlongToPtr
(
in
->
ppEnabledLayerNames
),
in
->
enabledLayerCount
);
out
->
enabledExtensionCount
=
in
->
enabledExtensionCount
;
out
->
ppEnabledExtensionNames
=
UlongToPtr
(
in
->
ppEnabledExtensionNames
);
out
->
ppEnabledExtensionNames
=
convert_char_pointer_array_win32_to_host
(
ctx
,
(
const
PTR32
*
)
UlongToPtr
(
in
->
ppEnabledExtensionNames
),
in
->
enabledExtensionCount
);
out
->
pEnabledFeatures
=
(
const
VkPhysicalDeviceFeatures
*
)
UlongToPtr
(
in
->
pEnabledFeatures
);
for
(
in_header
=
UlongToPtr
(
in
->
pNext
);
in_header
;
in_header
=
UlongToPtr
(
in_header
->
pNext
))
...
...
@@ -14519,9 +14555,9 @@ static inline void convert_VkInstanceCreateInfo_win32_to_host(struct conversion_
out
->
flags
=
in
->
flags
;
out
->
pApplicationInfo
=
convert_VkApplicationInfo_array_win32_to_host
(
ctx
,
(
const
VkApplicationInfo32
*
)
UlongToPtr
(
in
->
pApplicationInfo
),
1
);
out
->
enabledLayerCount
=
in
->
enabledLayerCount
;
out
->
ppEnabledLayerNames
=
UlongToPtr
(
in
->
ppEnabledLayerNames
);
out
->
ppEnabledLayerNames
=
convert_char_pointer_array_win32_to_host
(
ctx
,
(
const
PTR32
*
)
UlongToPtr
(
in
->
ppEnabledLayerNames
),
in
->
enabledLayerCount
);
out
->
enabledExtensionCount
=
in
->
enabledExtensionCount
;
out
->
ppEnabledExtensionNames
=
UlongToPtr
(
in
->
ppEnabledExtensionNames
);
out
->
ppEnabledExtensionNames
=
convert_char_pointer_array_win32_to_host
(
ctx
,
(
const
PTR32
*
)
UlongToPtr
(
in
->
ppEnabledExtensionNames
),
in
->
enabledExtensionCount
);
for
(
in_header
=
UlongToPtr
(
in
->
pNext
);
in_header
;
in_header
=
UlongToPtr
(
in_header
->
pNext
))
{
...
...
@@ -38175,13 +38211,16 @@ static NTSTATUS thunk32_vkGetMicromapBuildSizesEXT(void *args)
}
*
params
=
args
;
VkMicromapBuildInfoEXT
pBuildInfo_host
;
VkMicromapBuildSizesInfoEXT
pSizeInfo_host
;
struct
conversion_context
ctx
;
TRACE
(
"%#x, %#x, %#x, %#x
\n
"
,
params
->
device
,
params
->
buildType
,
params
->
pBuildInfo
,
params
->
pSizeInfo
);
convert_VkMicromapBuildInfoEXT_win32_to_host
((
const
VkMicromapBuildInfoEXT32
*
)
UlongToPtr
(
params
->
pBuildInfo
),
&
pBuildInfo_host
);
init_conversion_context
(
&
ctx
);
convert_VkMicromapBuildInfoEXT_win32_to_host
(
&
ctx
,
(
const
VkMicromapBuildInfoEXT32
*
)
UlongToPtr
(
params
->
pBuildInfo
),
&
pBuildInfo_host
);
convert_VkMicromapBuildSizesInfoEXT_win32_to_host
((
VkMicromapBuildSizesInfoEXT32
*
)
UlongToPtr
(
params
->
pSizeInfo
),
&
pSizeInfo_host
);
wine_device_from_handle
((
VkDevice
)
UlongToPtr
(
params
->
device
))
->
funcs
.
p_vkGetMicromapBuildSizesEXT
(
wine_device_from_handle
((
VkDevice
)
UlongToPtr
(
params
->
device
))
->
device
,
params
->
buildType
,
&
pBuildInfo_host
,
&
pSizeInfo_host
);
convert_VkMicromapBuildSizesInfoEXT_host_to_win32
(
&
pSizeInfo_host
,
(
VkMicromapBuildSizesInfoEXT32
*
)
UlongToPtr
(
params
->
pSizeInfo
));
free_conversion_context
(
&
ctx
);
return
STATUS_SUCCESS
;
}
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