summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHai Nguyen <codingforlove@gmail.com>2022-04-14 15:04:46 -0400
committerHai Nguyen <codingforlove@gmail.com>2022-04-14 15:04:46 -0400
commit5a020334b4ad14225af8f01dfe1ab5d0416789c2 (patch)
tree58383f0a51be618ba0dc88785170d7f95c9c54b7
parent5f6e13e06b8bd5a1eca190377b603bfd2aaa45ea (diff)
downloadSPIRV-Reflect-5a020334b4ad14225af8f01dfe1ab5d0416789c2.tar.gz
Fix for #143
- Added #ifdef for casting on C vs C++ compiles - Added spirv_reflect_pp to to compiling of spirv_reflect.c as C++
-rw-r--r--CMakeLists.txt31
-rw-r--r--spirv_reflect.c4
-rw-r--r--spirv_reflect.cpp4
3 files changed, 39 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b6b69dc..ecc0668 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -15,6 +15,9 @@ set(CMAKE_CXX_STANDARD 14)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin")
if (SPIRV_REFLECT_EXECUTABLE)
+ # ==========================================================================
+ # Compile spirv_reflect.c as C
+ # ==========================================================================
add_executable(spirv-reflect ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
${CMAKE_CURRENT_SOURCE_DIR}/spirv_reflect.h
${CMAKE_CURRENT_SOURCE_DIR}/spirv_reflect.c
@@ -39,6 +42,34 @@ if (SPIRV_REFLECT_EXECUTABLE)
endif()
install(TARGETS spirv-reflect RUNTIME DESTINATION bin)
+
+ # ==========================================================================
+ # Compile spirv_reflect.c as C++
+ # ==========================================================================
+ add_executable(spirv-reflect-pp ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/spirv_reflect.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/spirv_reflect.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/examples/arg_parser.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/examples/arg_parser.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/examples/common.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/examples/common.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/common/output_stream.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/common/output_stream.cpp)
+ target_compile_options(spirv-reflect-pp PRIVATE
+ $<$<CXX_COMPILER_ID:MSVC>:/W4 /WX>
+ $<$<CXX_COMPILER_ID:GNU>:-Wall -Werror>
+ $<$<CXX_COMPILER_ID:Clang>:-Wall -Werror>
+ $<$<CXX_COMPILER_ID:AppleClang>:-Wall -Werror>)
+ if (SPIRV_REFLECT_ENABLE_ASSERTS)
+ target_compile_definitions(spirv-reflect-pp PRIVATE SPIRV_REFLECT_ENABLE_ASSERTS)
+ endif()
+ set_target_properties(spirv-reflect-pp PROPERTIES CXX_STANDARD 11)
+ target_include_directories(spirv-reflect-pp PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
+ if(WIN32)
+ target_compile_definitions(spirv-reflect-pp PRIVATE _CRT_SECURE_NO_WARNINGS)
+ endif()
+
+ install(TARGETS spirv-reflect-pp RUNTIME DESTINATION bin)
endif()
if (SPIRV_REFLECT_EXAMPLES)
diff --git a/spirv_reflect.c b/spirv_reflect.c
index e9b11bf..4bc42fd 100644
--- a/spirv_reflect.c
+++ b/spirv_reflect.c
@@ -3557,7 +3557,11 @@ static SpvReflectResult CreateShaderModule(
if (flags & SPV_REFLECT_MODULE_FLAG_NO_COPY) {
// Set internal size and pointer to args passed in
p_module->_internal->spirv_size = size;
+#if defined(__cplusplus)
+ p_module->_internal->spirv_code = const_cast<uint32_t*>(static_cast<const uint32_t*>(p_code)); // cast that const away
+#else
p_module->_internal->spirv_code = (void*)p_code; // cast that const away
+#endif
p_module->_internal->spirv_word_count = (uint32_t)(size / SPIRV_WORD_SIZE);
}
else {
diff --git a/spirv_reflect.cpp b/spirv_reflect.cpp
new file mode 100644
index 0000000..9f991d6
--- /dev/null
+++ b/spirv_reflect.cpp
@@ -0,0 +1,4 @@
+//
+// This file exists to force compiling spirv_reflect.c as C++.
+//
+#include "spirv_reflect.c" \ No newline at end of file