slang shader!
This commit is contained in:
parent
544e6da087
commit
35562dd3fb
82
.idea/editor.xml
generated
82
.idea/editor.xml
generated
@ -246,100 +246,22 @@
|
|||||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StdIsConstantEvaluatedWillAlwaysEvaluateToConstant/@EntryIndexedValue" value="WARNING" type="string" />
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StdIsConstantEvaluatedWillAlwaysEvaluateToConstant/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StringLiteralTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StringLiteralTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppClangFormat/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
|
<option name="/Default/CodeStyle/CodeFormatting/CppClangFormat/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_ARGUMENT/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_BINARY_EXPRESSIONS_CHAIN/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_CALLS_CHAIN/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_EXPRESSION/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_EXTENDS_LIST/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_FOR_STMT/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_PARAMETER/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_TYPE_ARGUMENT/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_TYPE_PARAMETER/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTIPLE_DECLARATION/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_TERNARY/@EntryValue" value="ALIGN_ALL" type="string" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ANONYMOUS_METHOD_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ANONYMOUS_METHOD_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_CLASS_DEFINITION/@EntryValue" value="1" type="int" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_DECLARATIONS/@EntryValue" value="0" type="int" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_FUNCTION_DECLARATION/@EntryValue" value="1" type="int" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_FUNCTION_DEFINITION/@EntryValue" value="1" type="int" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BREAK_TEMPLATE_DECLARATION/@EntryValue" value="LINE_BREAK" type="string" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CASE_BLOCK_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CASE_BLOCK_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CONTINUOUS_LINE_INDENT/@EntryValue" value="Double" type="string" />
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/EXPORT_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_ACCESS_SPECIFIERS_FROM_CLASS/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_CASE_FROM_SWITCH/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_CLASS_MEMBERS_FROM_ACCESS_SPECIFIERS/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_COMMENT/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_SIZE/@EntryValue" value="4" type="int" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_STYLE/@EntryValue" value="Space" type="string" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INITIALIZER_BRACES/@EntryValue" value="END_OF_LINE_NO_SPACE" type="string" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INT_ALIGN_EQ/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INVOCABLE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INVOCABLE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_BLANK_LINES_IN_CODE/@EntryValue" value="2" type="int" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_BLANK_LINES_IN_DECLARATIONS/@EntryValue" value="2" type="int" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_USER_LINEBREAKS/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/LINE_BREAK_AFTER_COLON_IN_MEMBER_INITIALIZER_LISTS/@EntryValue" value="ON_SINGLE_LINE" type="string" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/MEMBER_INITIALIZER_LIST_STYLE/@EntryValue" value="DO_NOT_CHANGE" type="string" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_INDENTATION/@EntryValue" value="All" type="string" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/OTHER_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/OTHER_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_CATCH_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/REQUIRES_EXPRESSION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_ELSE_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_NAMESPACE_DEFINITIONS_ON_SAME_LINE/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_WHILE_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SIMPLE_BLOCK_STYLE/@EntryValue" value="DO_NOT_CHANGE" type="string" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_CAST_EXPRESSION_PARENTHESES/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COLON_IN_BITFIELD_DECLARATOR/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COMMA_IN_TEMPLATE_ARGS/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COMMA_IN_TEMPLATE_PARAMS/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_EXTENDS_COLON/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_FOR_COLON/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_FOR_SEMICOLON/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_DATA_MEMBERS/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_METHOD/@EntryValue" value="false" type="bool" />
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_METHOD/@EntryValue" value="false" type="bool" />
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_NESTED_DECLARATOR/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_DATA_MEMBERS/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_METHOD/@EntryValue" value="false" type="bool" />
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_METHOD/@EntryValue" value="false" type="bool" />
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_UNARY_OPERATOR/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_COLON_IN_BITFIELD_DECLARATOR/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_EXTENDS_COLON/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_FOR_COLON/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_FOR_SEMICOLON/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_ABSTRACT_DECL/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_DATA_MEMBERS/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_METHOD/@EntryValue" value="true" type="bool" />
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_METHOD/@EntryValue" value="true" type="bool" />
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_ABSTRACT_DECL/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_DATA_MEMBERS/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_METHOD/@EntryValue" value="true" type="bool" />
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_METHOD/@EntryValue" value="true" type="bool" />
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_TEMPLATE_ARGS/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BETWEEN_CLOSING_ANGLE_BRACKETS_IN_TEMPLATE_ARGS/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_ARRAY_ACCESS_BRACKETS/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_CAST_EXPRESSION_PARENTHESES/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_DECLARATION_PARENTHESES/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_BLOCKS/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_INITIALIZER_BRACES/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_METHOD_PARENTHESES/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_INITIALIZER_BRACES/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_TEMPLATE_ARGS/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPECIAL_ELSE_IF_TREATMENT/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TAB_WIDTH/@EntryValue" value="4" type="int" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TYPE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TYPE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_BINARY_OPSIGN/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_DECLARATION_LPAR/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_INVOCATION_LPAR/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_ARGUMENTS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_DECLARATION_LPAR/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_DECLARATION_RPAR/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_INVOCATION_LPAR/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_INVOCATION_RPAR/@EntryValue" value="false" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_TERNARY_OPSIGNS/@EntryValue" value="true" type="bool" />
|
|
||||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_PARAMETERS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
|
|
||||||
<option name="/Default/CodeStyle/EditorConfig/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
|
<option name="/Default/CodeStyle/EditorConfig/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
2
.idea/vcs.xml
generated
2
.idea/vcs.xml
generated
@ -2,7 +2,5 @@
|
|||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="VcsDirectoryMappings">
|
<component name="VcsDirectoryMappings">
|
||||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
<mapping directory="$PROJECT_DIR$/cmake-build-debug-visual-studio/_deps/glfw-src" vcs="Git" />
|
|
||||||
<mapping directory="$PROJECT_DIR$/cmake-build-debug-visual-studio/_deps/glm-src" vcs="Git" />
|
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
@ -8,6 +8,20 @@ include(FetchContent)
|
|||||||
variable_watch($ENV{VULKAN_SDK})
|
variable_watch($ENV{VULKAN_SDK})
|
||||||
find_package(Vulkan REQUIRED COMPONENTS volk)
|
find_package(Vulkan REQUIRED COMPONENTS volk)
|
||||||
|
|
||||||
|
find_library(SLANG_LIB NAMES slang HINTS "$ENV{VULKAN_SDK}/lib")
|
||||||
|
find_path(SLANG_INCLUDE_DIR NAMES slang/slang.h HINTS "$ENV{VULKAN_SDK}/include")
|
||||||
|
|
||||||
|
if(SLANG_LIB AND SLANG_INCLUDE_DIR)
|
||||||
|
add_library(slang_sdk SHARED IMPORTED)
|
||||||
|
set_target_properties(slang_sdk PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${SLANG_LIB}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${SLANG_INCLUDE_DIR}"
|
||||||
|
)
|
||||||
|
message(STATUS "Slang found via VULKAN_SDK: ${SLANG_LIB}")
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "VULKAN_SDK env var is set, but Slang wasn't found inside it!")
|
||||||
|
endif()
|
||||||
|
|
||||||
FetchContent_Declare(
|
FetchContent_Declare(
|
||||||
glfw
|
glfw
|
||||||
GIT_REPOSITORY https://github.com/glfw/glfw.git
|
GIT_REPOSITORY https://github.com/glfw/glfw.git
|
||||||
@ -27,6 +41,7 @@ FetchContent_Declare(
|
|||||||
GIT_REPOSITORY https://github.com/nothings/stb.git
|
GIT_REPOSITORY https://github.com/nothings/stb.git
|
||||||
GIT_TAG master
|
GIT_TAG master
|
||||||
)
|
)
|
||||||
|
|
||||||
FetchContent_MakeAvailable(stb)
|
FetchContent_MakeAvailable(stb)
|
||||||
|
|
||||||
add_library(stb INTERFACE)
|
add_library(stb INTERFACE)
|
||||||
@ -51,7 +66,7 @@ target_include_directories(v
|
|||||||
${CMAKE_CURRENT_SOURCE_DIR}
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(v PRIVATE glfw Vulkan::Vulkan glm stb)
|
target_link_libraries(v PRIVATE glfw Vulkan::Vulkan glm stb slang_sdk)
|
||||||
|
|
||||||
set(SHADER_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/shaders")
|
set(SHADER_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/shaders")
|
||||||
set(SHADER_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/shaders")
|
set(SHADER_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/shaders")
|
||||||
|
|||||||
6
main.cpp
6
main.cpp
@ -37,6 +37,8 @@ int main() {
|
|||||||
|
|
||||||
createSwapchain(window);
|
createSwapchain(window);
|
||||||
|
|
||||||
|
slang::createGlobalSession(slangGlobalSession.writeRef());
|
||||||
|
|
||||||
Renderer renderer(window);
|
Renderer renderer(window);
|
||||||
|
|
||||||
texture_manager.load("assets/boy.jpg", renderer);
|
texture_manager.load("assets/boy.jpg", renderer);
|
||||||
@ -47,7 +49,9 @@ int main() {
|
|||||||
|
|
||||||
renderer.begin_frame();
|
renderer.begin_frame();
|
||||||
|
|
||||||
renderer.submit_quad();
|
renderer.submit_quad({-0.5, 0.0});
|
||||||
|
|
||||||
|
renderer.submit_quad({0.5, 0.0});
|
||||||
|
|
||||||
// renderer.submit_sprite();
|
// renderer.submit_sprite();
|
||||||
|
|
||||||
|
|||||||
@ -236,7 +236,7 @@ void createDevice() {
|
|||||||
|
|
||||||
VkPhysicalDeviceVulkan13Features enabledVk13Features{
|
VkPhysicalDeviceVulkan13Features enabledVk13Features{
|
||||||
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES,
|
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES,
|
||||||
.pNext = nullptr,
|
.pNext = &enabledVk14Features,
|
||||||
.robustImageAccess = false,
|
.robustImageAccess = false,
|
||||||
.inlineUniformBlock = false,
|
.inlineUniformBlock = false,
|
||||||
.descriptorBindingInlineUniformBlockUpdateAfterBind = false,
|
.descriptorBindingInlineUniformBlockUpdateAfterBind = false,
|
||||||
@ -264,13 +264,20 @@ void createDevice() {
|
|||||||
.runtimeDescriptorArray = true,
|
.runtimeDescriptorArray = true,
|
||||||
.bufferDeviceAddress = true,
|
.bufferDeviceAddress = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
VkPhysicalDeviceVulkan11Features enabledVk11Features{
|
||||||
|
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES,
|
||||||
|
.pNext = &enabledVk12Features,
|
||||||
|
.shaderDrawParameters = true,
|
||||||
|
};
|
||||||
|
|
||||||
const VkPhysicalDeviceFeatures enabledVk10Features{
|
const VkPhysicalDeviceFeatures enabledVk10Features{
|
||||||
.samplerAnisotropy = true,
|
.samplerAnisotropy = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
const VkDeviceCreateInfo dci{
|
const VkDeviceCreateInfo dci{
|
||||||
.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
|
||||||
.pNext = &enabledVk12Features,
|
.pNext = &enabledVk11Features,
|
||||||
.queueCreateInfoCount = 1,
|
.queueCreateInfoCount = 1,
|
||||||
.pQueueCreateInfos = &qci,
|
.pQueueCreateInfos = &qci,
|
||||||
.enabledExtensionCount = (uint32_t)devExts.size(),
|
.enabledExtensionCount = (uint32_t)devExts.size(),
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
#include "init.h"
|
#include "init.h"
|
||||||
#include "sprite.h"
|
#include "sprite.h"
|
||||||
#include <vma/vk_mem_alloc.h>
|
#include <vma/vk_mem_alloc.h>
|
||||||
|
#include <slang/slang.h>
|
||||||
|
|
||||||
bool SortKey::operator<(const SortKey& b) const {
|
bool SortKey::operator<(const SortKey& b) const {
|
||||||
if (depth != b.depth) return depth < b.depth;
|
if (depth != b.depth) return depth < b.depth;
|
||||||
@ -16,7 +17,7 @@ bool SortKey::operator<(const SortKey& b) const {
|
|||||||
Renderer::Renderer(GLFWwindow *window) {
|
Renderer::Renderer(GLFWwindow *window) {
|
||||||
|
|
||||||
create_pipeline_layout();
|
create_pipeline_layout();
|
||||||
colored_quad_pipeline = create_graphics_pipeline<vertex_p2_st2_col4_a1_u32>(
|
colored_quad_pipeline = create_graphics_pipeline<vertex_p2_s2_st2_col4_a1_u32>(
|
||||||
device,
|
device,
|
||||||
pipelineLayout,
|
pipelineLayout,
|
||||||
swapchain_format.format,
|
swapchain_format.format,
|
||||||
@ -36,8 +37,7 @@ void Renderer::flush() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::submit_quad() {
|
void Renderer::submit_quad(glm::vec2 pos) {
|
||||||
glm::vec2 pos = {0, 0};
|
|
||||||
RenderCommand cmd {};
|
RenderCommand cmd {};
|
||||||
cmd.pipeline = PipelineType::ColoredQuad;
|
cmd.pipeline = PipelineType::ColoredQuad;
|
||||||
cmd.key = {
|
cmd.key = {
|
||||||
@ -47,8 +47,8 @@ void Renderer::submit_quad() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
cmd.colored_quad = {
|
cmd.colored_quad = {
|
||||||
.position = pos,
|
.pos = pos,
|
||||||
.size = {0.25, 0.25},
|
.scale = {0.25, 0.25},
|
||||||
.color = {0, 1, 1, 1},
|
.color = {0, 1, 1, 1},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -552,7 +552,7 @@ void Renderer::end_frame() {
|
|||||||
return cmd.key.depth;
|
return cmd.key.depth;
|
||||||
});
|
});
|
||||||
|
|
||||||
std::vector<vertex_p2_st2_col4_a1_u32> vertices;
|
std::vector<vertex_p2_s2_st2_col4_a1_u32> vertices;
|
||||||
|
|
||||||
for (auto& cmd : commands) {
|
for (auto& cmd : commands) {
|
||||||
|
|
||||||
@ -562,10 +562,10 @@ void Renderer::end_frame() {
|
|||||||
const auto &q = cmd.colored_quad;
|
const auto &q = cmd.colored_quad;
|
||||||
|
|
||||||
// Calculate spatial corners
|
// Calculate spatial corners
|
||||||
float x0 = q.position.x;
|
//float x0 = q.position.x;
|
||||||
float y0 = q.position.y;
|
//float y0 = q.position.y;
|
||||||
float x1 = q.position.x + q.size.x;
|
//float x1 = q.position.x + q.size.x;
|
||||||
float y1 = q.position.y + q.size.y;
|
//float y1 = q.position.y + q.size.y;
|
||||||
|
|
||||||
// Calculate UV corners
|
// Calculate UV corners
|
||||||
// float u0 = q.uvMin.x;
|
// float u0 = q.uvMin.x;
|
||||||
@ -574,25 +574,23 @@ void Renderer::end_frame() {
|
|||||||
// float v1 = q.uvMax.y;
|
// float v1 = q.uvMax.y;
|
||||||
|
|
||||||
// Define the 4 corners of the quad
|
// Define the 4 corners of the quad
|
||||||
vertex_p2_st2_col4_a1_u32 vTL = { {x0, y0}, {0, 0}, q.color, 1, 0 };
|
vertex_p2_s2_st2_col4_a1_u32 vTL = { q.pos, q.scale, {0, 0}, q.color, 1, 0 };
|
||||||
vertex_p2_st2_col4_a1_u32 vTR = { {x1, y0}, {0, 0}, q.color, 1, 0 };
|
vertex_p2_s2_st2_col4_a1_u32 vTR = { q.pos, q.scale, {0, 0}, q.color, 1, 0 };
|
||||||
vertex_p2_st2_col4_a1_u32 vBL = { {x0, y1}, {0, 0}, q.color, 1, 0 };
|
vertex_p2_s2_st2_col4_a1_u32 vBL = { q.pos, q.scale, {0, 0}, q.color, 1, 0 };
|
||||||
vertex_p2_st2_col4_a1_u32 vBR = { {x1, y1}, {0, 0}, q.color, 1, 0 };
|
vertex_p2_s2_st2_col4_a1_u32 vBR = { q.pos, q.scale, {0, 0}, q.color, 1, 0 };
|
||||||
|
|
||||||
// vertex_p2_st2_col4_a1_u32 vTL = { {x0, y0}, {u0, v0}, q.color, 1, q.textureID };
|
// vertex_p2_st2_col4_a1_u32 vTL = { {x0, y0}, {u0, v0}, q.color, 1, q.textureID };
|
||||||
// vertex_p2_st2_col4_a1_u32 vTR = { {x1, y0}, {u1, v0}, q.color, 1, q.textureID };
|
// vertex_p2_st2_col4_a1_u32 vTR = { {x1, y0}, {u1, v0}, q.color, 1, q.textureID };
|
||||||
// vertex_p2_st2_col4_a1_u32 vBL = { {x0, y1}, {u0, v1}, q.color, 1, q.textureID };
|
// vertex_p2_st2_col4_a1_u32 vBL = { {x0, y1}, {u0, v1}, q.color, 1, q.textureID };
|
||||||
// vertex_p2_st2_col4_a1_u32 vBR = { {x1, y1}, {u1, v1}, q.color, 1, q.textureID };
|
// vertex_p2_st2_col4_a1_u32 vBR = { {x1, y1}, {u1, v1}, q.color, 1, q.textureID };
|
||||||
|
|
||||||
// --- Triangle 1 (TL, TR, BL) ---
|
|
||||||
vertices.push_back(vTL);
|
vertices.push_back(vTL);
|
||||||
vertices.push_back(vTR);
|
|
||||||
vertices.push_back(vBL);
|
vertices.push_back(vBL);
|
||||||
|
vertices.push_back(vTR);
|
||||||
|
|
||||||
// --- Triangle 2 (TR, BR, BL) ---
|
|
||||||
vertices.push_back(vTR);
|
vertices.push_back(vTR);
|
||||||
vertices.push_back(vBR);
|
|
||||||
vertices.push_back(vBL);
|
vertices.push_back(vBL);
|
||||||
|
vertices.push_back(vBR);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -670,14 +668,15 @@ void Renderer::end_frame() {
|
|||||||
void Renderer::upload_vertex_buffer(
|
void Renderer::upload_vertex_buffer(
|
||||||
VkCommandBuffer cmd,
|
VkCommandBuffer cmd,
|
||||||
const Frame &frame,
|
const Frame &frame,
|
||||||
std::span<const vertex_p2_st2_col4_a1_u32> vertices) const {
|
std::span<const vertex_p2_s2_st2_col4_a1_u32> vertices) const
|
||||||
|
{
|
||||||
VkMemoryPropertyFlags memPropFlags;
|
VkMemoryPropertyFlags memPropFlags;
|
||||||
vmaGetAllocationMemoryProperties(allocator, frame.vertexBuffer.allocation, &memPropFlags);
|
vmaGetAllocationMemoryProperties(allocator, frame.vertexBuffer.allocation, &memPropFlags);
|
||||||
|
|
||||||
if(memPropFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) {
|
if(memPropFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) {
|
||||||
// The Allocation ended up in a mappable memory.
|
// The Allocation ended up in a mappable memory.
|
||||||
// Calling vmaCopyMemoryToAllocation() does vmaMapMemory(), memcpy(), vmaUnmapMemory(), and vmaFlushAllocation().
|
// Calling vmaCopyMemoryToAllocation() does vmaMapMemory(), memcpy(), vmaUnmapMemory(), and vmaFlushAllocation().
|
||||||
VkResult result = vmaCopyMemoryToAllocation(allocator, vertices.data(), frame.vertexBuffer.allocation, 0, vertices.size() * sizeof(vertex_p2_st2_col4_a1_u32));
|
VkResult result = vmaCopyMemoryToAllocation(allocator, vertices.data(), frame.vertexBuffer.allocation, 0, vertices.size() * sizeof(vertex_p2_s2_st2_col4_a1_u32));
|
||||||
// Check result...
|
// Check result...
|
||||||
|
|
||||||
VkBufferMemoryBarrier bufMemBarrier = { VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER };
|
VkBufferMemoryBarrier bufMemBarrier = { VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER };
|
||||||
@ -702,7 +701,7 @@ void Renderer::recordCommandBuffer(
|
|||||||
VkExtent2D extent,
|
VkExtent2D extent,
|
||||||
VkImageLayout oldLayout,
|
VkImageLayout oldLayout,
|
||||||
const Frame &frame,
|
const Frame &frame,
|
||||||
const std::vector<vertex_p2_st2_col4_a1_u32> &vertices) const
|
const std::vector<vertex_p2_s2_st2_col4_a1_u32> &vertices) const
|
||||||
{
|
{
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|||||||
@ -15,6 +15,10 @@
|
|||||||
#include <misc.h>
|
#include <misc.h>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <span>
|
#include <span>
|
||||||
|
#include <slang/slang.h>
|
||||||
|
#include <slang/slang-com-ptr.h>
|
||||||
|
|
||||||
|
inline Slang::ComPtr<slang::IGlobalSession> slangGlobalSession;
|
||||||
|
|
||||||
enum class PROJECTION_TYPE : uint8_t {
|
enum class PROJECTION_TYPE : uint8_t {
|
||||||
NONE,
|
NONE,
|
||||||
@ -25,25 +29,27 @@ enum class PROJECTION_TYPE : uint8_t {
|
|||||||
COUNT,
|
COUNT,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct vertex_p2_st2_col4_a1_u32 {
|
struct vertex_p2_s2_st2_col4_a1_u32 {
|
||||||
glm::vec2 pos;
|
glm::vec2 pos;
|
||||||
glm::vec2 st;
|
glm::vec2 scale;
|
||||||
glm::vec4 col;
|
glm::vec2 uv;
|
||||||
|
glm::vec4 color;
|
||||||
float alpha;
|
float alpha;
|
||||||
uint32_t textureID;
|
uint32_t textureID;
|
||||||
|
|
||||||
static VkVertexInputBindingDescription getBindingDescription() {
|
static VkVertexInputBindingDescription getBindingDescription() {
|
||||||
return {0, sizeof(vertex_p2_st2_col4_a1_u32), VK_VERTEX_INPUT_RATE_VERTEX};
|
return {0, sizeof(vertex_p2_s2_st2_col4_a1_u32), VK_VERTEX_INPUT_RATE_VERTEX};
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::array<VkVertexInputAttributeDescription, 5> getAttributeDescriptions() {
|
static std::array<VkVertexInputAttributeDescription, 6> getAttributeDescriptions() {
|
||||||
return {
|
return {
|
||||||
{
|
{
|
||||||
{0, 0, VK_FORMAT_R32G32_SFLOAT, offsetof(vertex_p2_st2_col4_a1_u32, pos)},
|
{0, 0, VK_FORMAT_R32G32_SFLOAT, offsetof(vertex_p2_s2_st2_col4_a1_u32, pos)},
|
||||||
{1, 0, VK_FORMAT_R32G32_SFLOAT, offsetof(vertex_p2_st2_col4_a1_u32, st)},
|
{1, 0, VK_FORMAT_R32G32_SFLOAT, offsetof(vertex_p2_s2_st2_col4_a1_u32, scale)},
|
||||||
{2, 0, VK_FORMAT_R32G32B32A32_SFLOAT, offsetof(vertex_p2_st2_col4_a1_u32, col)},
|
{2, 0, VK_FORMAT_R32G32_SFLOAT, offsetof(vertex_p2_s2_st2_col4_a1_u32, uv)},
|
||||||
{3, 0, VK_FORMAT_R32_SFLOAT, offsetof(vertex_p2_st2_col4_a1_u32, alpha)},
|
{3, 0, VK_FORMAT_R32G32B32A32_SFLOAT, offsetof(vertex_p2_s2_st2_col4_a1_u32, color)},
|
||||||
{4, 0, VK_FORMAT_R32_UINT, offsetof(vertex_p2_st2_col4_a1_u32, textureID)},
|
{4, 0, VK_FORMAT_R32_SFLOAT, offsetof(vertex_p2_s2_st2_col4_a1_u32, alpha)},
|
||||||
|
{5, 0, VK_FORMAT_R32_UINT, offsetof(vertex_p2_s2_st2_col4_a1_u32, textureID)},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -70,8 +76,8 @@ struct TexturedQuadCmd {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct ColoredQuadCmd {
|
struct ColoredQuadCmd {
|
||||||
glm::vec2 position;
|
glm::vec2 pos;
|
||||||
glm::vec2 size;
|
glm::vec2 scale;
|
||||||
glm::vec4 color;
|
glm::vec4 color;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -167,7 +173,7 @@ struct Renderer {
|
|||||||
void flush();
|
void flush();
|
||||||
|
|
||||||
void submit_sprite(glm::vec2 pos, const sprite_t &sprite);
|
void submit_sprite(glm::vec2 pos, const sprite_t &sprite);
|
||||||
void submit_quad();
|
void submit_quad(glm::vec2 pos);
|
||||||
|
|
||||||
explicit Renderer(GLFWwindow *window);
|
explicit Renderer(GLFWwindow *window);
|
||||||
void create_pipeline_layout();
|
void create_pipeline_layout();
|
||||||
@ -180,7 +186,7 @@ struct Renderer {
|
|||||||
VkExtent2D extent,
|
VkExtent2D extent,
|
||||||
VkImageLayout oldLayout,
|
VkImageLayout oldLayout,
|
||||||
const Frame &frame,
|
const Frame &frame,
|
||||||
const std::vector<vertex_p2_st2_col4_a1_u32> &vertices) const;
|
const std::vector<vertex_p2_s2_st2_col4_a1_u32> &vertices) const;
|
||||||
void immediate_submit(std::function<void(VkCommandBuffer)>&& func) const;
|
void immediate_submit(std::function<void(VkCommandBuffer)>&& func) const;
|
||||||
void transition_image_layout(VkCommandBuffer cmd, VkImage image, VkImageLayout oldLayout, VkImageLayout newLayout) const;
|
void transition_image_layout(VkCommandBuffer cmd, VkImage image, VkImageLayout oldLayout, VkImageLayout newLayout) const;
|
||||||
VkImageView create_image_view(VkImage image, VkFormat format) const;
|
VkImageView create_image_view(VkImage image, VkFormat format) const;
|
||||||
@ -190,7 +196,7 @@ struct Renderer {
|
|||||||
void upload_vertex_buffer(
|
void upload_vertex_buffer(
|
||||||
VkCommandBuffer cmd,
|
VkCommandBuffer cmd,
|
||||||
const Frame &frame,
|
const Frame &frame,
|
||||||
std::span<const vertex_p2_st2_col4_a1_u32> vertices) const;
|
std::span<const vertex_p2_s2_st2_col4_a1_u32> vertices) const;
|
||||||
|
|
||||||
VkPipeline get_pipeline(PipelineType type) const;
|
VkPipeline get_pipeline(PipelineType type) const;
|
||||||
// void bind_material(VkCommandBuffer cmd, uint16_t materialID);
|
// void bind_material(VkCommandBuffer cmd, uint16_t materialID);
|
||||||
@ -211,6 +217,38 @@ struct Renderer {
|
|||||||
bool enableBlending)
|
bool enableBlending)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
auto slangTargets{ std::to_array<slang::TargetDesc>({ {
|
||||||
|
.format = SLANG_SPIRV,
|
||||||
|
.profile = slangGlobalSession->findProfile("spirv_1_4")
|
||||||
|
} })};
|
||||||
|
auto slangOptions{ std::to_array<slang::CompilerOptionEntry>({ {
|
||||||
|
slang::CompilerOptionName::EmitSpirvDirectly,
|
||||||
|
{slang::CompilerOptionValueKind::Int, 1}
|
||||||
|
} })};
|
||||||
|
slang::SessionDesc slangSessionDesc{
|
||||||
|
.targets = slangTargets.data(),
|
||||||
|
.targetCount = SlangInt(slangTargets.size()),
|
||||||
|
.defaultMatrixLayoutMode = SLANG_MATRIX_LAYOUT_COLUMN_MAJOR,
|
||||||
|
.compilerOptionEntries = slangOptions.data(),
|
||||||
|
.compilerOptionEntryCount = uint32_t(slangOptions.size())
|
||||||
|
};
|
||||||
|
Slang::ComPtr<slang::ISession> slangSession;
|
||||||
|
slangGlobalSession->createSession(slangSessionDesc, slangSession.writeRef());
|
||||||
|
|
||||||
|
Slang::ComPtr<slang::IModule> slangModule{
|
||||||
|
slangSession->loadModuleFromSource("triangle", "shaders/shader.slang", nullptr, nullptr)
|
||||||
|
};
|
||||||
|
Slang::ComPtr<ISlangBlob> spirv;
|
||||||
|
slangModule->getTargetCode(0, spirv.writeRef());
|
||||||
|
|
||||||
|
VkShaderModuleCreateInfo shaderModuleCI{
|
||||||
|
.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
|
||||||
|
.codeSize = spirv->getBufferSize(),
|
||||||
|
.pCode = (uint32_t*)spirv->getBufferPointer()
|
||||||
|
};
|
||||||
|
VkShaderModule shaderModule{};
|
||||||
|
vkCreateShaderModule(device, &shaderModuleCI, nullptr, &shaderModule);
|
||||||
|
|
||||||
auto vsCode = loadFile("shaders/triangle.vert.spv");
|
auto vsCode = loadFile("shaders/triangle.vert.spv");
|
||||||
auto fsCode = loadFile("shaders/triangle.frag.spv");
|
auto fsCode = loadFile("shaders/triangle.frag.spv");
|
||||||
|
|
||||||
@ -220,32 +258,22 @@ struct Renderer {
|
|||||||
|
|
||||||
smci.codeSize = vsCode.size();
|
smci.codeSize = vsCode.size();
|
||||||
smci.pCode = reinterpret_cast<uint32_t*>(vsCode.data());
|
smci.pCode = reinterpret_cast<uint32_t*>(vsCode.data());
|
||||||
VkShaderModule vs;
|
// VkShaderModule vs;
|
||||||
vkCreateShaderModule(device, &smci, nullptr, &vs);
|
// vkCreateShaderModule(device, &smci, nullptr, &vs);
|
||||||
|
|
||||||
smci.codeSize = fsCode.size();
|
smci.codeSize = fsCode.size();
|
||||||
smci.pCode = reinterpret_cast<uint32_t*>(fsCode.data());
|
smci.pCode = reinterpret_cast<uint32_t*>(fsCode.data());
|
||||||
VkShaderModule fs;
|
// VkShaderModule fs;
|
||||||
vkCreateShaderModule(device, &smci, nullptr, &fs);
|
// vkCreateShaderModule(device, &smci, nullptr, &fs);
|
||||||
|
|
||||||
// --- Shaders ---
|
// --- Shaders ---
|
||||||
VkPipelineShaderStageCreateInfo stages[2] = {
|
std::vector<VkPipelineShaderStageCreateInfo> shaderStages{
|
||||||
{
|
{ .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
|
||||||
VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
|
.stage = VK_SHADER_STAGE_VERTEX_BIT,
|
||||||
nullptr,
|
.module = shaderModule, .pName = "main"},
|
||||||
0,
|
{ .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
|
||||||
VK_SHADER_STAGE_VERTEX_BIT,
|
.stage = VK_SHADER_STAGE_FRAGMENT_BIT,
|
||||||
vs,
|
.module = shaderModule, .pName = "main" }
|
||||||
"main"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
|
|
||||||
nullptr,
|
|
||||||
0,
|
|
||||||
VK_SHADER_STAGE_FRAGMENT_BIT,
|
|
||||||
fs,
|
|
||||||
"main"
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// --- Vertex Input (Generic) ---
|
// --- Vertex Input (Generic) ---
|
||||||
@ -296,7 +324,7 @@ struct Renderer {
|
|||||||
0,
|
0,
|
||||||
VK_POLYGON_MODE_FILL,
|
VK_POLYGON_MODE_FILL,
|
||||||
VK_CULL_MODE_NONE,
|
VK_CULL_MODE_NONE,
|
||||||
VK_FRONT_FACE_CLOCKWISE,
|
VK_FRONT_FACE_COUNTER_CLOCKWISE,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
@ -341,8 +369,8 @@ struct Renderer {
|
|||||||
VkGraphicsPipelineCreateInfo gpci{
|
VkGraphicsPipelineCreateInfo gpci{
|
||||||
.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
|
||||||
.pNext = &rci,
|
.pNext = &rci,
|
||||||
.stageCount = 2,
|
.stageCount = (uint32_t) shaderStages.size(),
|
||||||
.pStages = stages,
|
.pStages = shaderStages.data(),
|
||||||
.pVertexInputState = &vi,
|
.pVertexInputState = &vi,
|
||||||
.pInputAssemblyState = &ia,
|
.pInputAssemblyState = &ia,
|
||||||
.pViewportState = &vp,
|
.pViewportState = &vp,
|
||||||
|
|||||||
48
shaders/shader.slang
Normal file
48
shaders/shader.slang
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
struct VSInput {
|
||||||
|
float2 pos;
|
||||||
|
float2 scale;
|
||||||
|
float2 uv;
|
||||||
|
float4 color;
|
||||||
|
float alpha;
|
||||||
|
uint32_t textureID;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct VSOutput {
|
||||||
|
float4 pos : SV_POSITION;
|
||||||
|
float2 uv;
|
||||||
|
float4 color;
|
||||||
|
float alpha;
|
||||||
|
uint32_t tex_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const float2 square[6] = {
|
||||||
|
float2(-0.5, -0.5), // Top-left
|
||||||
|
float2(-0.5, 0.5), // Bottom-left
|
||||||
|
float2( 0.5, -0.5), // Top-right
|
||||||
|
|
||||||
|
float2( 0.5, -0.5), // Top-right
|
||||||
|
float2(-0.5, 0.5), // Bottom-left
|
||||||
|
float2( 0.5, 0.5) // Bottom-right
|
||||||
|
};
|
||||||
|
|
||||||
|
[shader ("vertex")]
|
||||||
|
VSOutput main(VSInput input, uint vertex_index : SV_VertexID) {
|
||||||
|
VSOutput output;
|
||||||
|
|
||||||
|
float2 vertex_pos = square[vertex_index];
|
||||||
|
float2 final_pos = (vertex_pos * input.scale) + input.pos;
|
||||||
|
|
||||||
|
output.pos = float4(final_pos, 0.0, 1.0);
|
||||||
|
output.uv = input.uv;
|
||||||
|
output.color = input.color;
|
||||||
|
output.alpha = input.alpha;
|
||||||
|
output.tex_id = input.textureID;
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
[shader("fragment")]
|
||||||
|
float4 main(VSOutput input) {
|
||||||
|
|
||||||
|
return float4(input.color.rgb, input.alpha);
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user