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
d617eecc
Commit
d617eecc
authored
May 24, 2022
by
Georg Lehmann
Committed by
Alexandre Julliard
May 24, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winevulkan: Update to VK spec version 1.3.215.
Signed-off-by:
Georg Lehmann
<
dadschoorse@gmail.com
>
parent
aad201c7
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
41 additions
and
28 deletions
+41
-28
make_vulkan
dlls/winevulkan/make_vulkan
+1
-1
vulkan_thunks.c
dlls/winevulkan/vulkan_thunks.c
+20
-19
winevulkan.json
dlls/winevulkan/winevulkan.json
+1
-1
vulkan.h
include/wine/vulkan.h
+19
-7
No files found.
dlls/winevulkan/make_vulkan
View file @
d617eecc
...
@@ -64,7 +64,7 @@ from enum import Enum
...
@@ -64,7 +64,7 @@ from enum import Enum
LOGGER
=
logging
.
Logger
(
"vulkan"
)
LOGGER
=
logging
.
Logger
(
"vulkan"
)
LOGGER
.
addHandler
(
logging
.
StreamHandler
())
LOGGER
.
addHandler
(
logging
.
StreamHandler
())
VK_XML_VERSION
=
"1.3.21
4
"
VK_XML_VERSION
=
"1.3.21
5
"
WINE_VK_VERSION
=
(
1
,
3
)
WINE_VK_VERSION
=
(
1
,
3
)
# Filenames to create.
# Filenames to create.
...
...
dlls/winevulkan/vulkan_thunks.c
View file @
d617eecc
...
@@ -3472,22 +3472,6 @@ VkResult convert_VkDeviceCreateInfo_struct_chain(const void *pNext, VkDeviceCrea
...
@@ -3472,22 +3472,6 @@ VkResult convert_VkDeviceCreateInfo_struct_chain(const void *pNext, VkDeviceCrea
break
;
break
;
}
}
case
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV
:
{
const
VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV
*
in
=
(
const
VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV
*
)
in_header
;
VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV
*
out
;
if
(
!
(
out
=
malloc
(
sizeof
(
*
out
))))
goto
out_of_memory
;
out
->
sType
=
in
->
sType
;
out
->
pNext
=
NULL
;
out
->
fragmentShaderBarycentric
=
in
->
fragmentShaderBarycentric
;
out_header
->
pNext
=
(
VkBaseOutStructure
*
)
out
;
out_header
=
out_header
->
pNext
;
break
;
}
case
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV
:
case
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV
:
{
{
const
VkPhysicalDeviceShaderImageFootprintFeaturesNV
*
in
=
(
const
VkPhysicalDeviceShaderImageFootprintFeaturesNV
*
)
in_header
;
const
VkPhysicalDeviceShaderImageFootprintFeaturesNV
*
in
=
(
const
VkPhysicalDeviceShaderImageFootprintFeaturesNV
*
)
in_header
;
...
@@ -4743,6 +4727,22 @@ VkResult convert_VkDeviceCreateInfo_struct_chain(const void *pNext, VkDeviceCrea
...
@@ -4743,6 +4727,22 @@ VkResult convert_VkDeviceCreateInfo_struct_chain(const void *pNext, VkDeviceCrea
break
;
break
;
}
}
case
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR
:
{
const
VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR
*
in
=
(
const
VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR
*
)
in_header
;
VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR
*
out
;
if
(
!
(
out
=
malloc
(
sizeof
(
*
out
))))
goto
out_of_memory
;
out
->
sType
=
in
->
sType
;
out
->
pNext
=
NULL
;
out
->
fragmentShaderBarycentric
=
in
->
fragmentShaderBarycentric
;
out_header
->
pNext
=
(
VkBaseOutStructure
*
)
out
;
out_header
=
out_header
->
pNext
;
break
;
}
case
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV
:
case
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV
:
{
{
const
VkPhysicalDeviceRayTracingMotionBlurFeaturesNV
*
in
=
(
const
VkPhysicalDeviceRayTracingMotionBlurFeaturesNV
*
)
in_header
;
const
VkPhysicalDeviceRayTracingMotionBlurFeaturesNV
*
in
=
(
const
VkPhysicalDeviceRayTracingMotionBlurFeaturesNV
*
)
in_header
;
...
@@ -4938,10 +4938,10 @@ VkResult convert_VkDeviceCreateInfo_struct_chain(const void *pNext, VkDeviceCrea
...
@@ -4938,10 +4938,10 @@ VkResult convert_VkDeviceCreateInfo_struct_chain(const void *pNext, VkDeviceCrea
break
;
break
;
}
}
case
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_
EXT
:
case
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_
AMD
:
{
{
const
VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeatures
EXT
*
in
=
(
const
VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesEXT
*
)
in_header
;
const
VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeatures
AMD
*
in
=
(
const
VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD
*
)
in_header
;
VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeatures
EXT
*
out
;
VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeatures
AMD
*
out
;
if
(
!
(
out
=
malloc
(
sizeof
(
*
out
))))
goto
out_of_memory
;
if
(
!
(
out
=
malloc
(
sizeof
(
*
out
))))
goto
out_of_memory
;
...
@@ -9954,6 +9954,7 @@ static const char * const vk_device_extensions[] =
...
@@ -9954,6 +9954,7 @@ static const char * const vk_device_extensions[] =
"VK_KHR_external_memory"
,
"VK_KHR_external_memory"
,
"VK_KHR_external_semaphore"
,
"VK_KHR_external_semaphore"
,
"VK_KHR_format_feature_flags2"
,
"VK_KHR_format_feature_flags2"
,
"VK_KHR_fragment_shader_barycentric"
,
"VK_KHR_fragment_shading_rate"
,
"VK_KHR_fragment_shading_rate"
,
"VK_KHR_get_memory_requirements2"
,
"VK_KHR_get_memory_requirements2"
,
"VK_KHR_global_priority"
,
"VK_KHR_global_priority"
,
...
...
dlls/winevulkan/winevulkan.json
View file @
d617eecc
...
@@ -2,6 +2,6 @@
...
@@ -2,6 +2,6 @@
"file_format_version"
:
"1.0.0"
,
"file_format_version"
:
"1.0.0"
,
"ICD"
:
{
"ICD"
:
{
"library_path"
:
".
\\
winevulkan.dll"
,
"library_path"
:
".
\\
winevulkan.dll"
,
"api_version"
:
"1.3.21
4
"
"api_version"
:
"1.3.21
5
"
}
}
}
}
include/wine/vulkan.h
View file @
d617eecc
...
@@ -437,6 +437,8 @@
...
@@ -437,6 +437,8 @@
#define VK_EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME "VK_EXT_graphics_pipeline_library"
#define VK_EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME "VK_EXT_graphics_pipeline_library"
#define VK_AMD_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_SPEC_VERSION 1
#define VK_AMD_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_SPEC_VERSION 1
#define VK_AMD_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_EXTENSION_NAME "VK_AMD_shader_early_and_late_fragment_tests"
#define VK_AMD_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_EXTENSION_NAME "VK_AMD_shader_early_and_late_fragment_tests"
#define VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION 1
#define VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME "VK_KHR_fragment_shader_barycentric"
#define VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_SPEC_VERSION 1
#define VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_SPEC_VERSION 1
#define VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_EXTENSION_NAME "VK_KHR_shader_subgroup_uniform_control_flow"
#define VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_EXTENSION_NAME "VK_KHR_shader_subgroup_uniform_control_flow"
#define VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION 1
#define VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION 1
...
@@ -539,7 +541,7 @@
...
@@ -539,7 +541,7 @@
#define VK_API_VERSION_1_1 VK_MAKE_API_VERSION(0, 1, 1, 0)
#define VK_API_VERSION_1_1 VK_MAKE_API_VERSION(0, 1, 1, 0)
#define VK_API_VERSION_1_2 VK_MAKE_API_VERSION(0, 1, 2, 0)
#define VK_API_VERSION_1_2 VK_MAKE_API_VERSION(0, 1, 2, 0)
#define VK_API_VERSION_1_3 VK_MAKE_API_VERSION(0, 1, 3, 0)
#define VK_API_VERSION_1_3 VK_MAKE_API_VERSION(0, 1, 3, 0)
#define VK_HEADER_VERSION 21
4
#define VK_HEADER_VERSION 21
5
#define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 3, VK_HEADER_VERSION)
#define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 3, VK_HEADER_VERSION)
#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
#define VK_USE_64_BIT_PTR_DEFINES 0
#define VK_USE_64_BIT_PTR_DEFINES 0
...
@@ -3648,7 +3650,7 @@ typedef enum VkStructureType
...
@@ -3648,7 +3650,7 @@ typedef enum VkStructureType
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV
=
1000201000
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV
=
1000201000
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV
=
1000202000
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV
=
1000202000
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV
=
1000202001
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV
=
1000202001
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_
NV
=
1000203000
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_
KHR
=
1000203000
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV
=
1000204000
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV
=
1000204000
,
VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV
=
1000205000
,
VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV
=
1000205000
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV
=
1000205002
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV
=
1000205002
,
...
@@ -3773,7 +3775,8 @@ typedef enum VkStructureType
...
@@ -3773,7 +3775,8 @@ typedef enum VkStructureType
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT
=
1000320000
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT
=
1000320000
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT
=
1000320001
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT
=
1000320001
,
VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT
=
1000320002
,
VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT
=
1000320002
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_EXT
=
1000321000
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD
=
1000321000
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_PROPERTIES_KHR
=
1000322000
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR
=
1000323000
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR
=
1000323000
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES
=
1000325000
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES
=
1000325000
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV
=
1000326000
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV
=
1000326000
,
...
@@ -3960,6 +3963,7 @@ typedef enum VkStructureType
...
@@ -3960,6 +3963,7 @@ typedef enum VkStructureType
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR
=
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR
=
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR
=
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR
=
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES
,
VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR
=
VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE
,
VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR
=
VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV
=
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR
=
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR
=
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR
=
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES
,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR
=
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES
,
VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR
=
VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO
,
VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR
=
VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO
,
...
@@ -6557,12 +6561,20 @@ typedef struct VkPhysicalDeviceFragmentDensityMapPropertiesEXT
...
@@ -6557,12 +6561,20 @@ typedef struct VkPhysicalDeviceFragmentDensityMapPropertiesEXT
VkBool32
fragmentDensityInvocations
;
VkBool32
fragmentDensityInvocations
;
}
VkPhysicalDeviceFragmentDensityMapPropertiesEXT
;
}
VkPhysicalDeviceFragmentDensityMapPropertiesEXT
;
typedef
struct
VkPhysicalDeviceFragmentShaderBarycentricFeatures
NV
typedef
struct
VkPhysicalDeviceFragmentShaderBarycentricFeatures
KHR
{
{
VkStructureType
sType
;
VkStructureType
sType
;
void
*
pNext
;
void
*
pNext
;
VkBool32
fragmentShaderBarycentric
;
VkBool32
fragmentShaderBarycentric
;
}
VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV
;
}
VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR
;
typedef
VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR
VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV
;
typedef
struct
VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR
{
VkStructureType
sType
;
void
*
pNext
;
VkBool32
triStripVertexOrderIndependentOfProvokingVertex
;
}
VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR
;
typedef
struct
VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT
typedef
struct
VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT
{
{
...
@@ -7429,12 +7441,12 @@ typedef struct VkPhysicalDeviceShaderDrawParametersFeatures
...
@@ -7429,12 +7441,12 @@ typedef struct VkPhysicalDeviceShaderDrawParametersFeatures
}
VkPhysicalDeviceShaderDrawParametersFeatures
;
}
VkPhysicalDeviceShaderDrawParametersFeatures
;
typedef
VkPhysicalDeviceShaderDrawParametersFeatures
VkPhysicalDeviceShaderDrawParameterFeatures
;
typedef
VkPhysicalDeviceShaderDrawParametersFeatures
VkPhysicalDeviceShaderDrawParameterFeatures
;
typedef
struct
VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeatures
EXT
typedef
struct
VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeatures
AMD
{
{
VkStructureType
sType
;
VkStructureType
sType
;
void
*
pNext
;
void
*
pNext
;
VkBool32
shaderEarlyAndLateFragmentTests
;
VkBool32
shaderEarlyAndLateFragmentTests
;
}
VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeatures
EXT
;
}
VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeatures
AMD
;
typedef
struct
VkPhysicalDeviceShaderFloat16Int8Features
typedef
struct
VkPhysicalDeviceShaderFloat16Int8Features
{
{
...
...
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