added render loop for a triangle shader (broken)
This commit is contained in:
parent
d16dbe63fa
commit
e04111aefb
49
build.sh
49
build.sh
@ -12,7 +12,7 @@ if [ -v vulkan ]; then render_flag="-DSTG_VULKAN_RENDERER"; echo "[v
|
|||||||
if [ -v opengl ] && [ ! -v render_flag ]; then render_flag="-DSTG_OPENGL_RENDERER"; echo "[opengl renderer]"; fi
|
if [ -v opengl ] && [ ! -v render_flag ]; then render_flag="-DSTG_OPENGL_RENDERER"; echo "[opengl renderer]"; fi
|
||||||
if [ -v webgl ] && [ ! -v render_flag ]; then render_flag="-DSTG_WEBGL_RENDERER"; echo "[webgl renderer]"; fi
|
if [ -v webgl ] && [ ! -v render_flag ]; then render_flag="-DSTG_WEBGL_RENDERER"; echo "[webgl renderer]"; fi
|
||||||
if [ -v dx11 ] && [ ! -v render_flag ]; then render_flag="-DSTG_DX11_RENDERER"; echo "[dx11 renderer]"; fi
|
if [ -v dx11 ] && [ ! -v render_flag ]; then render_flag="-DSTG_DX11_RENDERER"; echo "[dx11 renderer]"; fi
|
||||||
if [ ! -v render_flag ]; then render_flag="-DSTG_VULKAN_RENDERER"; echo "[default renderer - vulkan]"; fi
|
if [ ! -v render_flag ]; then render_flag="-DSTG_VULKAN_RENDERER"; vulkan="vulkan"; echo "[default renderer - vulkan]"; fi
|
||||||
|
|
||||||
# for command line build args
|
# for command line build args
|
||||||
auto_compile_flags="${render_flag}"
|
auto_compile_flags="${render_flag}"
|
||||||
@ -42,7 +42,7 @@ glsl_stage_tesc="-fshader-stage=tesc"
|
|||||||
glsl_stage_tese="-fshader-stage=tese"
|
glsl_stage_tese="-fshader-stage=tese"
|
||||||
glsl_stage_geom="-fshader-stage=geom"
|
glsl_stage_geom="-fshader-stage=geom"
|
||||||
glsl_stage_comp="-fshader-stage=comp"
|
glsl_stage_comp="-fshader-stage=comp"
|
||||||
glsl_out="-o/build/shaders/glsl/"
|
glsl_out="-o./shaders/glsl/"
|
||||||
|
|
||||||
|
|
||||||
clang_common="${include_flags} -g -Xclang -flto-visibility-public-std -Wno-unknown-warning-option -fdiagnostics-absolute-paths -Wall -Wno-missing-braces -Wno-unused-function -Wno-writable-strings -Wno-unused-value -Wno-unused-variable -Wno-unused-local-typedef -Wno-deprecated-register -Wno-deprecated-declarations -Wno-unused-but-set-variable -Wno-single-bit-bitfield-constant-conversion -Wno-compare-distinct-pointer-types -Wno-initializer-overrides -Wno-incompatible-pointer-types-discards-qualifiers -Wno-for-loop-analysis -DVMA_STATIC_VULKAN_FUNCTIONS=0"
|
clang_common="${include_flags} -g -Xclang -flto-visibility-public-std -Wno-unknown-warning-option -fdiagnostics-absolute-paths -Wall -Wno-missing-braces -Wno-unused-function -Wno-writable-strings -Wno-unused-value -Wno-unused-variable -Wno-unused-local-typedef -Wno-deprecated-register -Wno-deprecated-declarations -Wno-unused-but-set-variable -Wno-single-bit-bitfield-constant-conversion -Wno-compare-distinct-pointer-types -Wno-initializer-overrides -Wno-incompatible-pointer-types-discards-qualifiers -Wno-for-loop-analysis -DVMA_STATIC_VULKAN_FUNCTIONS=0"
|
||||||
@ -82,36 +82,37 @@ if [ ! -f $vma_obj ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ -v vulkan ]; then
|
||||||
mkdir -p ./shaders/glsl
|
mkdir -p ./shaders/glsl
|
||||||
|
mkdir -p ../src/file_data
|
||||||
|
|
||||||
for file in ../src/shaders/glsl/*.glsl; do
|
for file in ../src/shaders/glsl/*.glsl; do
|
||||||
base_name=$(basename -- "$file" .glsl)
|
base_name=$(basename -- "$file" .glsl)
|
||||||
echo $base_name
|
|
||||||
echo $file
|
|
||||||
|
|
||||||
case base_name in
|
case "$base_name" in
|
||||||
*.vert)
|
*.vert) glsl_stage="${glsl_stage_vert}" ;;
|
||||||
glsl_stage="${glsl_stage_vert}"
|
*.frag) glsl_stage="${glsl_stage_frag}" ;;
|
||||||
;;
|
*.tesc) glsl_stage="${glsl_stage_tesc}" ;;
|
||||||
*.frag)
|
*.tese) glsl_stage="${glsl_stage_tese}" ;;
|
||||||
glsl_stage="${glsl_stage_vert}"
|
*.geom) glsl_stage="${glsl_stage_geom}" ;;
|
||||||
;;
|
*.comp) glsl_stage="${glsl_stage_comp}" ;;
|
||||||
*.tesc)
|
*) continue ;;
|
||||||
glsl_stage="${glsl_stage_tesc}"
|
|
||||||
;;
|
|
||||||
*.tese)
|
|
||||||
glsl_stage="${glsl_stage_tese}"
|
|
||||||
;;
|
|
||||||
*.geom)
|
|
||||||
glsl_stage="${glsl_stage_geom}"
|
|
||||||
;;
|
|
||||||
*.comp)
|
|
||||||
glsl_stage="${glsl_stage_comp}"
|
|
||||||
;;
|
|
||||||
esac
|
esac
|
||||||
|
|
||||||
$glsl_compile $glsl_flags $glsl_stage file "${glsl_out}${base_name}.spv"
|
$glsl_compile $glsl_flags $glsl_stage $file "${glsl_out}${base_name}.spv"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
rm -f ../src/file_data/spv.c
|
||||||
|
touch ../src/file_data/spv.c
|
||||||
|
|
||||||
|
for file in ./shaders/glsl/*.spv; do
|
||||||
|
base_name=$(basename -- "$file" .spv)
|
||||||
|
|
||||||
|
xxd -n "shader_${base_name}" -i $file >> ../src/file_data/spv.c
|
||||||
|
done
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
$cpp_compiler $vma_compile_flags $vma_source_files $vma_out $vma_obj
|
$cpp_compiler $vma_compile_flags $vma_source_files $vma_out $vma_obj
|
||||||
|
|
||||||
ar rcs libvma.a vmastdc++.o
|
ar rcs libvma.a vmastdc++.o
|
||||||
|
|||||||
180
src/file_data/spv.c
Normal file
180
src/file_data/spv.c
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
unsigned char shader_quad_frag[] = {
|
||||||
|
0x03, 0x02, 0x23, 0x07, 0x00, 0x06, 0x01, 0x00, 0x0b, 0x00, 0x0d, 0x00,
|
||||||
|
0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||||
|
0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x09, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00,
|
||||||
|
0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00,
|
||||||
|
0x02, 0x00, 0x00, 0x00, 0xcc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x0a, 0x00,
|
||||||
|
0x47, 0x4c, 0x5f, 0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0x5f, 0x63, 0x70,
|
||||||
|
0x70, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x5f, 0x6c, 0x69, 0x6e, 0x65,
|
||||||
|
0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, 0x00,
|
||||||
|
0x04, 0x00, 0x08, 0x00, 0x47, 0x4c, 0x5f, 0x47, 0x4f, 0x4f, 0x47, 0x4c,
|
||||||
|
0x45, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x64, 0x69,
|
||||||
|
0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, 0x05, 0x00, 0x04, 0x00,
|
||||||
|
0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x05, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x43,
|
||||||
|
0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00,
|
||||||
|
0x0c, 0x00, 0x00, 0x00, 0x66, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f,
|
||||||
|
0x72, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
|
||||||
|
0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
|
||||||
|
0x0c, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x13, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00,
|
||||||
|
0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
|
||||||
|
0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||||
|
0x20, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||||
|
0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||||
|
0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
|
||||||
|
0x0a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||||
|
0x20, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x0a, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00,
|
||||||
|
0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f,
|
||||||
|
0x36, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
|
||||||
|
0x05, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00,
|
||||||
|
0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||||
|
0x10, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
|
||||||
|
0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00,
|
||||||
|
0x07, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
|
||||||
|
0x10, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
|
||||||
|
0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
|
||||||
|
0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00
|
||||||
|
};
|
||||||
|
unsigned int shader_quad_frag_len = 572;
|
||||||
|
unsigned char shader_quad_vert[] = {
|
||||||
|
0x03, 0x02, 0x23, 0x07, 0x00, 0x06, 0x01, 0x00, 0x0b, 0x00, 0x0d, 0x00,
|
||||||
|
0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x0c, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
|
||||||
|
0x26, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00,
|
||||||
|
0x02, 0x00, 0x00, 0x00, 0xcc, 0x01, 0x00, 0x00, 0x04, 0x00, 0x0a, 0x00,
|
||||||
|
0x47, 0x4c, 0x5f, 0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0x5f, 0x63, 0x70,
|
||||||
|
0x70, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x5f, 0x6c, 0x69, 0x6e, 0x65,
|
||||||
|
0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, 0x00,
|
||||||
|
0x04, 0x00, 0x08, 0x00, 0x47, 0x4c, 0x5f, 0x47, 0x4f, 0x4f, 0x47, 0x4c,
|
||||||
|
0x45, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x64, 0x69,
|
||||||
|
0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, 0x05, 0x00, 0x04, 0x00,
|
||||||
|
0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x05, 0x00, 0x05, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x70, 0x6f, 0x73, 0x69,
|
||||||
|
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00,
|
||||||
|
0x17, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x00, 0x00,
|
||||||
|
0x05, 0x00, 0x06, 0x00, 0x20, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50,
|
||||||
|
0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x06, 0x00, 0x06, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00,
|
||||||
|
0x06, 0x00, 0x07, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x69, 0x7a, 0x65,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||||
|
0x02, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x43, 0x6c, 0x69, 0x70, 0x44,
|
||||||
|
0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x00, 0x06, 0x00, 0x07, 0x00,
|
||||||
|
0x20, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x43,
|
||||||
|
0x75, 0x6c, 0x6c, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x00,
|
||||||
|
0x05, 0x00, 0x03, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x05, 0x00, 0x06, 0x00, 0x26, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x56,
|
||||||
|
0x65, 0x72, 0x74, 0x65, 0x78, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x00, 0x00,
|
||||||
|
0x05, 0x00, 0x05, 0x00, 0x31, 0x00, 0x00, 0x00, 0x66, 0x72, 0x61, 0x67,
|
||||||
|
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00,
|
||||||
|
0x20, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
|
||||||
|
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x48, 0x00, 0x05, 0x00, 0x20, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||||
|
0x0b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
|
||||||
|
0x20, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00,
|
||||||
|
0x04, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00,
|
||||||
|
0x0b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
|
||||||
|
0x31, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x13, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00,
|
||||||
|
0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
|
||||||
|
0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||||
|
0x15, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||||
|
0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00,
|
||||||
|
0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
|
||||||
|
0x20, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||||
|
0x0a, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00,
|
||||||
|
0x0c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0xbf, 0x2c, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00,
|
||||||
|
0x0f, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
|
||||||
|
0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x3f, 0x2c, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00,
|
||||||
|
0x11, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||||
|
0x2c, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
|
||||||
|
0x0e, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x06, 0x00,
|
||||||
|
0x0a, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
|
||||||
|
0x11, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
|
||||||
|
0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||||
|
0x1c, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
|
||||||
|
0x09, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
|
||||||
|
0x16, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||||
|
0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x80, 0x3f, 0x2c, 0x00, 0x06, 0x00, 0x14, 0x00, 0x00, 0x00,
|
||||||
|
0x19, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
|
||||||
|
0x0d, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x06, 0x00, 0x14, 0x00, 0x00, 0x00,
|
||||||
|
0x1a, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
|
||||||
|
0x0d, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x06, 0x00, 0x14, 0x00, 0x00, 0x00,
|
||||||
|
0x1b, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
|
||||||
|
0x18, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x06, 0x00, 0x15, 0x00, 0x00, 0x00,
|
||||||
|
0x1c, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
|
||||||
|
0x1b, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
|
||||||
|
0x08, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x1c, 0x00, 0x04, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||||
|
0x1e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x06, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||||
|
0x1d, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,
|
||||||
|
0x1f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00,
|
||||||
|
0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
|
||||||
|
0x21, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||||
|
0x15, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00,
|
||||||
|
0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
|
||||||
|
0x25, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
|
||||||
|
0x3b, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
|
||||||
|
0x2e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00,
|
||||||
|
0x20, 0x00, 0x04, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||||
|
0x14, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x30, 0x00, 0x00, 0x00,
|
||||||
|
0x31, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
|
||||||
|
0x33, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
|
||||||
|
0x36, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
|
||||||
|
0x05, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0c, 0x00, 0x00, 0x00,
|
||||||
|
0x13, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x17, 0x00, 0x00, 0x00,
|
||||||
|
0x1c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00,
|
||||||
|
0x27, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
|
||||||
|
0x28, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
|
||||||
|
0x27, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00,
|
||||||
|
0x2a, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||||
|
0x2c, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x50, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00,
|
||||||
|
0x2b, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
|
||||||
|
0x18, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x2e, 0x00, 0x00, 0x00,
|
||||||
|
0x2f, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
|
||||||
|
0x3e, 0x00, 0x03, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00,
|
||||||
|
0x3d, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
|
||||||
|
0x26, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x33, 0x00, 0x00, 0x00,
|
||||||
|
0x34, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
|
||||||
|
0x3d, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00,
|
||||||
|
0x34, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x31, 0x00, 0x00, 0x00,
|
||||||
|
0x35, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00
|
||||||
|
};
|
||||||
|
unsigned int shader_quad_vert_len = 1512;
|
||||||
@ -35,6 +35,10 @@ int main(int argc, char **argv)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BeginFrame();
|
||||||
|
DrawTriangle();
|
||||||
|
FinishFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
DestroyRenderer();
|
DestroyRenderer();
|
||||||
|
|||||||
@ -297,7 +297,7 @@ b32 ChangeWorkingDir(const char *)
|
|||||||
|
|
||||||
u8 *OpenFile(const char *)
|
u8 *OpenFile(const char *)
|
||||||
{
|
{
|
||||||
u8 *bytes;
|
u8 *bytes = NULL;
|
||||||
|
|
||||||
return bytes;
|
return bytes;
|
||||||
}
|
}
|
||||||
|
|||||||
14
src/render.c
14
src/render.c
@ -22,3 +22,17 @@ void DestroyRenderer() {
|
|||||||
_DestroyRenderer();
|
_DestroyRenderer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
b32 BeginFrame()
|
||||||
|
{
|
||||||
|
return _BeginFrame();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawTriangle()
|
||||||
|
{
|
||||||
|
_DrawTriangle();
|
||||||
|
}
|
||||||
|
|
||||||
|
b32 FinishFrame()
|
||||||
|
{
|
||||||
|
return _FinishFrame();
|
||||||
|
}
|
||||||
|
|||||||
@ -19,3 +19,8 @@
|
|||||||
b32 InitRenderer(Arena *arena);
|
b32 InitRenderer(Arena *arena);
|
||||||
void DestroyRenderer();
|
void DestroyRenderer();
|
||||||
|
|
||||||
|
// Drawing
|
||||||
|
static b32 DrawFrame();
|
||||||
|
static void DrawTriangle();
|
||||||
|
static b32 FinishFrame();
|
||||||
|
|
||||||
|
|||||||
@ -15,6 +15,237 @@ void _DestroyRenderer()
|
|||||||
DestroyVulkan();
|
DestroyVulkan();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
b32 _BeginFrame()
|
||||||
|
{
|
||||||
|
b32 success = true;
|
||||||
|
VkResult result;
|
||||||
|
|
||||||
|
u8 f_ix = renderer.frame_state.frame_cnt % FRAME_OVERLAP;
|
||||||
|
|
||||||
|
VkDevice device = renderer.vk.device;
|
||||||
|
VkCommandBuffer cmd = renderer.vk.frame.buffers[f_ix];
|
||||||
|
VkFence fence = renderer.vk.frame.render_fences[f_ix];
|
||||||
|
VkSemaphore sc_sem = renderer.vk.frame.swapchain_sems[f_ix];
|
||||||
|
VkSemaphore rndr_sem = renderer.vk.frame.render_sems[f_ix];
|
||||||
|
VkSwapchainKHR swapchain = renderer.vk.swapchain;
|
||||||
|
|
||||||
|
// TODO(MA): make this work with VK_PRESENT_MODE_MAILBOX_KHR and remove assignment of present mode to FIFO
|
||||||
|
result = vkWaitForFences(device, 1, &fence, VK_TRUE, 1000000000);
|
||||||
|
if (result != VK_SUCCESS)
|
||||||
|
{
|
||||||
|
Printf("vkWaitForFences failure: %s", VkResultStr(result));
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
result = vkAcquireNextImageKHR(device, swapchain, 1000000000, sc_sem, 0, &renderer.frame_state.img_ix);
|
||||||
|
if (result != VK_SUCCESS)
|
||||||
|
{
|
||||||
|
Printf("vkAcquireNextImageKHR failure: %s", VkResultStr(result));
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
result = vkResetFences(device, 1, &fence);
|
||||||
|
if (result != VK_SUCCESS)
|
||||||
|
{
|
||||||
|
Printf("vkResetFences failure: %s", VkResultStr(result));
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
result = vkResetCommandBuffer(cmd, 0);
|
||||||
|
if (result != VK_SUCCESS)
|
||||||
|
{
|
||||||
|
Printf("vkResetCommandBuffer failure: %s", VkResultStr(result));
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
VkCommandBufferBeginInfo cmd_info = {
|
||||||
|
.sType = STYPE(COMMAND_BUFFER_BEGIN_INFO),
|
||||||
|
.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,
|
||||||
|
};
|
||||||
|
|
||||||
|
result = vkBeginCommandBuffer(cmd, &cmd_info);
|
||||||
|
if (result != VK_SUCCESS)
|
||||||
|
{
|
||||||
|
Printf("vkBeginCommandBuffer failure: %s", VkResultStr(result));
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
void _DrawTriangle()
|
||||||
|
{
|
||||||
|
u8 f_ix = renderer.frame_state.frame_cnt % FRAME_OVERLAP;
|
||||||
|
|
||||||
|
VkCommandBuffer cmd = renderer.vk.frame.buffers[f_ix];
|
||||||
|
|
||||||
|
TransitionImage(cmd, renderer.vk.sc.draw_img.img, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
|
||||||
|
TransitionImage(cmd, renderer.vk.sc.depth_img.img, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL);
|
||||||
|
|
||||||
|
VkRenderingAttachmentInfo col_attach_info = {
|
||||||
|
.sType = STYPE(RENDERING_ATTACHMENT_INFO),
|
||||||
|
.imageView = renderer.vk.sc.draw_img.view,
|
||||||
|
.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
|
||||||
|
.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
|
||||||
|
.storeOp = VK_ATTACHMENT_STORE_OP_STORE,
|
||||||
|
};
|
||||||
|
|
||||||
|
VkRenderingAttachmentInfo depth_attach_info = {
|
||||||
|
.sType = STYPE(RENDERING_ATTACHMENT_INFO),
|
||||||
|
.imageView = renderer.vk.sc.depth_img.view,
|
||||||
|
.imageLayout = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
|
||||||
|
.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
|
||||||
|
.storeOp = VK_ATTACHMENT_STORE_OP_STORE,
|
||||||
|
};
|
||||||
|
|
||||||
|
VkRenderingInfo render_info = {
|
||||||
|
.sType = STYPE(RENDERING_INFO),
|
||||||
|
.layerCount = 1,
|
||||||
|
.colorAttachmentCount = 1,
|
||||||
|
.pColorAttachments = &col_attach_info,
|
||||||
|
.pDepthAttachment = &depth_attach_info,
|
||||||
|
.renderArea = {
|
||||||
|
.extent = {
|
||||||
|
.width = renderer.vk.sc.extent.width,
|
||||||
|
.height = renderer.vk.sc.extent.height,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
vkCmdBeginRendering(cmd, &render_info);
|
||||||
|
|
||||||
|
vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, renderer.vk.pipe.pipelines[PIPELINE_CUBE]);
|
||||||
|
vkCmdBindDescriptorSets(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, renderer.vk.pipe.pipeline_layout, 0, DESC_TYPE_MAX, renderer.vk.pipe.sets, 0, NULL);
|
||||||
|
|
||||||
|
VkViewport viewport = {
|
||||||
|
.width = (f32)renderer.vk.sc.extent.width,
|
||||||
|
.height = (f32)renderer.vk.sc.extent.height,
|
||||||
|
.maxDepth = 1.0,
|
||||||
|
};
|
||||||
|
|
||||||
|
vkCmdSetViewport(cmd, 0, 1, &viewport);
|
||||||
|
|
||||||
|
VkRect2D scissor = {
|
||||||
|
.extent = {
|
||||||
|
.width = renderer.vk.sc.extent.width,
|
||||||
|
.height = renderer.vk.sc.extent.height,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
vkCmdSetScissor(cmd, 0, 1, &scissor);
|
||||||
|
|
||||||
|
vkCmdDrawIndexed(cmd, 3, 1, 0, 0, 0);
|
||||||
|
|
||||||
|
// TODO(MA): maybe store current image layout between functions
|
||||||
|
}
|
||||||
|
|
||||||
|
b32 _FinishFrame()
|
||||||
|
{
|
||||||
|
b32 success = true;
|
||||||
|
VkResult result;
|
||||||
|
|
||||||
|
u32 f_ix = renderer.frame_state.frame_cnt % FRAME_OVERLAP;
|
||||||
|
|
||||||
|
VkCommandBuffer cmd = renderer.vk.frame.buffers[f_ix];
|
||||||
|
VkSemaphore sc_sem = renderer.vk.frame.swapchain_sems[f_ix];
|
||||||
|
VkSemaphore rndr_sem = renderer.vk.frame.render_sems[f_ix];
|
||||||
|
VkFence fence = renderer.vk.frame.render_fences[f_ix];
|
||||||
|
|
||||||
|
vkCmdEndRendering(cmd);
|
||||||
|
|
||||||
|
TransitionImage(cmd, renderer.vk.sc.draw_img.img, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
|
||||||
|
TransitionImage(cmd, renderer.vk.sc.imgs[f_ix], VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
|
||||||
|
|
||||||
|
VkExtent2D extent = {
|
||||||
|
.width = renderer.vk.sc.extent.width,
|
||||||
|
.height = renderer.vk.sc.extent.height,
|
||||||
|
};
|
||||||
|
|
||||||
|
CopyImageToImage(cmd, renderer.vk.sc.draw_img.img, renderer.vk.sc.imgs[f_ix], extent, extent);
|
||||||
|
|
||||||
|
TransitionImage(cmd, renderer.vk.sc.imgs[f_ix], VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR);
|
||||||
|
|
||||||
|
result = vkEndCommandBuffer(cmd);
|
||||||
|
if (result != VK_SUCCESS)
|
||||||
|
{
|
||||||
|
Printf("vkEndCommandBuffer failure: %s", VkResultStr(result));
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
VkCommandBufferSubmitInfo cmd_info = {
|
||||||
|
.sType = STYPE(COMMAND_BUFFER_SUBMIT_INFO),
|
||||||
|
.commandBuffer = cmd,
|
||||||
|
};
|
||||||
|
|
||||||
|
VkSemaphoreSubmitInfo wait_info = {
|
||||||
|
.sType = STYPE(SEMAPHORE_SUBMIT_INFO),
|
||||||
|
.semaphore = sc_sem,
|
||||||
|
.stageMask = VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT,
|
||||||
|
.value = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
VkSemaphoreSubmitInfo signal_info = {
|
||||||
|
.sType = STYPE(SEMAPHORE_SUBMIT_INFO),
|
||||||
|
.semaphore = rndr_sem,
|
||||||
|
.stageMask = VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT,
|
||||||
|
.value = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
VkSubmitInfo2 submit_info = {
|
||||||
|
.sType = STYPE(SUBMIT_INFO_2),
|
||||||
|
.waitSemaphoreInfoCount = 1,
|
||||||
|
.pWaitSemaphoreInfos = &wait_info,
|
||||||
|
.signalSemaphoreInfoCount = 1,
|
||||||
|
.pSignalSemaphoreInfos = &signal_info,
|
||||||
|
.commandBufferInfoCount = 1,
|
||||||
|
.pCommandBufferInfos = &cmd_info,
|
||||||
|
};
|
||||||
|
|
||||||
|
result = vkQueueSubmit2(renderer.vk.queues.graphics_queue, 1, &submit_info, fence);
|
||||||
|
if (result != VK_SUCCESS)
|
||||||
|
{
|
||||||
|
Printf("vkQueueSubmit2 failure: %s", VkResultStr(result));
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
VkPresentInfoKHR present_info = {
|
||||||
|
.sType = STYPE(PRESENT_INFO_KHR),
|
||||||
|
.pSwapchains = &renderer.vk.swapchain,
|
||||||
|
.swapchainCount = 1,
|
||||||
|
.pWaitSemaphores = &rndr_sem,
|
||||||
|
.waitSemaphoreCount = 1,
|
||||||
|
.pImageIndices = &f_ix,
|
||||||
|
};
|
||||||
|
|
||||||
|
result = vkQueuePresentKHR(renderer.vk.queues.graphics_queue, &present_info);
|
||||||
|
if (result != VK_SUCCESS)
|
||||||
|
{
|
||||||
|
Printf("vkQueuePresentKHR failure: %s", VkResultStr(result));
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BACK END API END
|
* BACK END API END
|
||||||
*/
|
*/
|
||||||
@ -23,6 +254,79 @@ void _DestroyRenderer()
|
|||||||
* INTERNAL API
|
* INTERNAL API
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// UTIL
|
||||||
|
|
||||||
|
static void CopyImageToImage(VkCommandBuffer cmd, VkImage src, VkImage dst, VkExtent2D src_ext, VkExtent2D dst_ext)
|
||||||
|
{
|
||||||
|
VkImageBlit2 blit = {
|
||||||
|
.sType = STYPE(IMAGE_BLIT_2),
|
||||||
|
.srcOffsets = {
|
||||||
|
{},
|
||||||
|
{ .x = (i32)src_ext.width, .y = (i32)src_ext.height, .z = 1 },
|
||||||
|
},
|
||||||
|
.dstOffsets = {
|
||||||
|
{},
|
||||||
|
{ .x = (i32)dst_ext.width, .y = (i32)dst_ext.height, .z = 1 },
|
||||||
|
},
|
||||||
|
.srcSubresource = {
|
||||||
|
.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
|
||||||
|
.baseArrayLayer = 0,
|
||||||
|
.layerCount = 1,
|
||||||
|
.mipLevel = 0,
|
||||||
|
},
|
||||||
|
.dstSubresource = {
|
||||||
|
.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
|
||||||
|
.baseArrayLayer = 0,
|
||||||
|
.layerCount = 1,
|
||||||
|
.mipLevel = 0,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
VkBlitImageInfo2 blit_info = {
|
||||||
|
.sType = STYPE(BLIT_IMAGE_INFO_2),
|
||||||
|
.srcImage = src,
|
||||||
|
.srcImageLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||||
|
.dstImage = dst,
|
||||||
|
.dstImageLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||||
|
.filter = VK_FILTER_LINEAR,
|
||||||
|
.regionCount = 1,
|
||||||
|
.pRegions = &blit,
|
||||||
|
};
|
||||||
|
|
||||||
|
vkCmdBlitImage2(cmd, &blit_info);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void TransitionImage(VkCommandBuffer cmd, VkImage img, VkImageLayout curr, VkImageLayout new)
|
||||||
|
{
|
||||||
|
VkImageMemoryBarrier2 barrier = {
|
||||||
|
.sType = STYPE(IMAGE_MEMORY_BARRIER_2),
|
||||||
|
.srcStageMask = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
|
||||||
|
.srcAccessMask = VK_ACCESS_2_MEMORY_WRITE_BIT,
|
||||||
|
.dstStageMask = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
|
||||||
|
.dstAccessMask = VK_ACCESS_2_MEMORY_WRITE_BIT | VK_ACCESS_2_MEMORY_READ_BIT,
|
||||||
|
.oldLayout = curr,
|
||||||
|
.newLayout = new,
|
||||||
|
.image = img,
|
||||||
|
.subresourceRange = {
|
||||||
|
.aspectMask = new == VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_COLOR_BIT,
|
||||||
|
.baseMipLevel = 0,
|
||||||
|
.levelCount = VK_REMAINING_MIP_LEVELS,
|
||||||
|
.baseArrayLayer = 0,
|
||||||
|
.layerCount = VK_REMAINING_ARRAY_LAYERS,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
VkDependencyInfo dep_info = {
|
||||||
|
.sType = STYPE(DEPENDENCY_INFO),
|
||||||
|
.imageMemoryBarrierCount = 1,
|
||||||
|
.pImageMemoryBarriers = &barrier,
|
||||||
|
};
|
||||||
|
|
||||||
|
vkCmdPipelineBarrier2(cmd, &dep_info);
|
||||||
|
}
|
||||||
|
|
||||||
|
// INIT
|
||||||
|
|
||||||
static b32 InitVulkan(Arena *arena)
|
static b32 InitVulkan(Arena *arena)
|
||||||
{
|
{
|
||||||
Assert(arena != NULL, "Vulkan memory is null");
|
Assert(arena != NULL, "Vulkan memory is null");
|
||||||
@ -50,6 +354,7 @@ static b32 InitVulkan(Arena *arena)
|
|||||||
Assert(CreateImmediateStructures(), "Unable to create immediate structures");
|
Assert(CreateImmediateStructures(), "Unable to create immediate structures");
|
||||||
Assert(CreateSwapchain(), "Unable to initialize swapchain and draw images");
|
Assert(CreateSwapchain(), "Unable to initialize swapchain and draw images");
|
||||||
Assert(CreateDescriptors(), "Unable to initialize descriptors.");
|
Assert(CreateDescriptors(), "Unable to initialize descriptors.");
|
||||||
|
Assert(CreatePipelines(), "Unable to initialize pipelines.");
|
||||||
|
|
||||||
ArenaFree(renderer.arena);
|
ArenaFree(renderer.arena);
|
||||||
|
|
||||||
@ -354,6 +659,8 @@ static b32 InitVkDeviceFunctions() {
|
|||||||
INIT_DEV_FN(vkResetCommandBuffer);
|
INIT_DEV_FN(vkResetCommandBuffer);
|
||||||
INIT_DEV_FN(vkFreeCommandBuffers);
|
INIT_DEV_FN(vkFreeCommandBuffers);
|
||||||
INIT_DEV_FN(vkDestroyDescriptorSetLayout);
|
INIT_DEV_FN(vkDestroyDescriptorSetLayout);
|
||||||
|
INIT_DEV_FN(vkDestroyShaderModule);
|
||||||
|
INIT_DEV_FN(vkQueuePresentKHR);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -520,6 +827,11 @@ static b32 CreateSwapchain()
|
|||||||
if (present_mode != VK_PRESENT_MODE_MAILBOX_KHR)
|
if (present_mode != VK_PRESENT_MODE_MAILBOX_KHR)
|
||||||
present_mode = VK_PRESENT_MODE_FIFO_KHR;
|
present_mode = VK_PRESENT_MODE_FIFO_KHR;
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// TODO(MA): REMOVE THIS LATER
|
||||||
|
present_mode = VK_PRESENT_MODE_FIFO_KHR;
|
||||||
|
|
||||||
swapchain_create_info.minImageCount = capabilities.minImageCount + 1;
|
swapchain_create_info.minImageCount = capabilities.minImageCount + 1;
|
||||||
swapchain_create_info.surface = surface;
|
swapchain_create_info.surface = surface;
|
||||||
swapchain_create_info.imageFormat = renderer.vk.sc.format;
|
swapchain_create_info.imageFormat = renderer.vk.sc.format;
|
||||||
@ -560,8 +872,6 @@ static b32 CreateSwapchain()
|
|||||||
.depth = 1,
|
.depth = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
renderer.vk.sc.extent = extent_3d;
|
|
||||||
|
|
||||||
VmaAllocationCreateInfo alloc_create_info = {
|
VmaAllocationCreateInfo alloc_create_info = {
|
||||||
.usage = VMA_MEMORY_USAGE_GPU_ONLY,
|
.usage = VMA_MEMORY_USAGE_GPU_ONLY,
|
||||||
.requiredFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
|
.requiredFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
|
||||||
@ -598,6 +908,11 @@ static b32 CreateSwapchain()
|
|||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
success = false;
|
success = false;
|
||||||
|
|
||||||
|
// Setting values
|
||||||
|
renderer.vk.sc.extent = extent_3d;
|
||||||
|
renderer.vk.sc.depth_img.fmt = depth_image_create_info.format;
|
||||||
|
renderer.vk.sc.draw_img.fmt = draw_image_create_info.format;
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -639,33 +954,33 @@ static b32 CreateDescriptors()
|
|||||||
VkDevice device = renderer.vk.device;
|
VkDevice device = renderer.vk.device;
|
||||||
VkResult result;
|
VkResult result;
|
||||||
|
|
||||||
result = vkCreateDescriptorPool(device, &desc_pool_info, NULL, &renderer.vk.desc.pool);
|
result = vkCreateDescriptorPool(device, &desc_pool_info, NULL, &renderer.vk.pipe.pool);
|
||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
success = false;
|
success = false;
|
||||||
|
|
||||||
result = vkCreateDescriptorSetLayout(device, &shared_layout_create_info, NULL, &renderer.vk.desc.layouts[DESC_TYPE_SHARED]);
|
result = vkCreateDescriptorSetLayout(device, &shared_layout_create_info, NULL, &renderer.vk.pipe.layouts[DESC_TYPE_SHARED]);
|
||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
success = false;
|
success = false;
|
||||||
|
|
||||||
for (u32 i = DESC_TYPE_COMBINED_SAMPLER; i < DESC_TYPE_MAX; i++)
|
for (u32 i = DESC_TYPE_COMBINED_SAMPLER; i < DESC_TYPE_MAX; i++)
|
||||||
{
|
{
|
||||||
bindless_layout_binding.descriptorType = desc_type_map[i];
|
bindless_layout_binding.descriptorType = desc_type_map[i];
|
||||||
result = vkCreateDescriptorSetLayout(device, &bindless_layout_create_info, NULL, &renderer.vk.desc.layouts[i]);
|
result = vkCreateDescriptorSetLayout(device, &bindless_layout_create_info, NULL, &renderer.vk.pipe.layouts[i]);
|
||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
success = false;
|
success = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
set_allocate_info.descriptorPool = renderer.vk.desc.pool;
|
set_allocate_info.descriptorPool = renderer.vk.pipe.pool;
|
||||||
set_allocate_info.pSetLayouts = renderer.vk.desc.layouts;
|
set_allocate_info.pSetLayouts = renderer.vk.pipe.layouts;
|
||||||
|
|
||||||
result = vkAllocateDescriptorSets(device, &set_allocate_info, renderer.vk.desc.sets);
|
result = vkAllocateDescriptorSets(device, &set_allocate_info, renderer.vk.pipe.sets);
|
||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
success = false;
|
success = false;
|
||||||
|
|
||||||
pipeline_layout_create_info.setLayoutCount = DESC_TYPE_MAX;
|
pipeline_layout_create_info.setLayoutCount = DESC_TYPE_MAX;
|
||||||
pipeline_layout_create_info.pSetLayouts = renderer.vk.desc.layouts;
|
pipeline_layout_create_info.pSetLayouts = renderer.vk.pipe.layouts;
|
||||||
|
|
||||||
result = vkCreatePipelineLayout(device, &pipeline_layout_create_info, NULL, &renderer.vk.desc.pipeline_layout);
|
result = vkCreatePipelineLayout(device, &pipeline_layout_create_info, NULL, &renderer.vk.pipe.pipeline_layout);
|
||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
success = false;
|
success = false;
|
||||||
|
|
||||||
@ -675,13 +990,72 @@ static b32 CreateDescriptors()
|
|||||||
static b32 CreatePipelines()
|
static b32 CreatePipelines()
|
||||||
{
|
{
|
||||||
b32 success = true;
|
b32 success = true;
|
||||||
|
VkResult result;
|
||||||
|
VkDevice device = renderer.vk.device;
|
||||||
|
|
||||||
|
VkShaderModule cube_vert, cube_frag;
|
||||||
|
success &= CreateShaderModule(shader_quad_vert, shader_quad_vert_len, &cube_vert);
|
||||||
|
success &= CreateShaderModule(shader_quad_frag, shader_quad_frag_len, &cube_frag);
|
||||||
|
|
||||||
|
VkPipelineShaderStageCreateInfo cube_shader_stages[] = {
|
||||||
|
{
|
||||||
|
.sType = STYPE(PIPELINE_SHADER_STAGE_CREATE_INFO),
|
||||||
|
.stage = VK_SHADER_STAGE_VERTEX_BIT,
|
||||||
|
.module = cube_vert,
|
||||||
|
.pName = "main",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.sType = STYPE(PIPELINE_SHADER_STAGE_CREATE_INFO),
|
||||||
|
.stage = VK_SHADER_STAGE_FRAGMENT_BIT,
|
||||||
|
.module = cube_frag,
|
||||||
|
.pName = "main",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
VkPipelineRenderingCreateInfo pipeline_render_info = {
|
||||||
|
.sType = STYPE(PIPELINE_RENDERING_CREATE_INFO),
|
||||||
|
.colorAttachmentCount = 1,
|
||||||
|
.pColorAttachmentFormats = &renderer.vk.sc.draw_img.fmt,
|
||||||
|
.depthAttachmentFormat = renderer.vk.sc.depth_img.fmt,
|
||||||
|
};
|
||||||
|
|
||||||
|
cube_create_info.pStages = cube_shader_stages;
|
||||||
|
cube_create_info.stageCount = Len(cube_shader_stages);
|
||||||
|
cube_create_info.layout = renderer.vk.pipe.pipeline_layout;
|
||||||
|
cube_create_info.pNext = &pipeline_render_info;
|
||||||
|
|
||||||
|
result = vkCreateGraphicsPipelines(device, 0, 1, &cube_create_info, NULL, &renderer.vk.pipe.pipelines[PIPELINE_CUBE]);
|
||||||
|
if (result != VK_SUCCESS)
|
||||||
|
{
|
||||||
|
Printf("vkCreateGraphicsPipelines failure: %s", VkResultStr(result));
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
vkDestroyShaderModule(device, cube_vert, NULL);
|
||||||
|
vkDestroyShaderModule(device, cube_frag, NULL);
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VkShaderModule CreateShaderModule(const char *file_name)
|
static b32 CreateShaderModule(u8 *bytes, u32 len, VkShaderModule *module)
|
||||||
{
|
{
|
||||||
return NULL;
|
VkResult result;
|
||||||
|
b32 success = true;
|
||||||
|
|
||||||
|
VkShaderModuleCreateInfo module_info = {
|
||||||
|
.sType = STYPE(SHADER_MODULE_CREATE_INFO),
|
||||||
|
.codeSize = len,
|
||||||
|
.pCode = (u32 *)bytes,
|
||||||
|
};
|
||||||
|
|
||||||
|
result = vkCreateShaderModule(renderer.vk.device, &module_info, NULL, module);
|
||||||
|
if (result != VK_SUCCESS)
|
||||||
|
{
|
||||||
|
Printf("vkCreateShaderModule failure: %s", VkResultStr(result));
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DestroyVulkan()
|
static void DestroyVulkan()
|
||||||
@ -693,14 +1067,17 @@ static void DestroyVulkan()
|
|||||||
SwapchainStructures sc = renderer.vk.sc;
|
SwapchainStructures sc = renderer.vk.sc;
|
||||||
VmaAllocator vma_alloc = renderer.vk.alloc;
|
VmaAllocator vma_alloc = renderer.vk.alloc;
|
||||||
VkSwapchainKHR swapchain = renderer.vk.swapchain;
|
VkSwapchainKHR swapchain = renderer.vk.swapchain;
|
||||||
DescriptorStructures desc = renderer.vk.desc;
|
PipelineStructures pipe = renderer.vk.pipe;
|
||||||
|
|
||||||
vkDestroyPipelineLayout(device, desc.pipeline_layout, NULL);
|
for (u32 i = PIPELINE_CUBE; i < PIPELINE_MAX; i++)
|
||||||
|
vkDestroyPipeline(device, pipe.pipelines[i], NULL);
|
||||||
|
|
||||||
|
vkDestroyPipelineLayout(device, pipe.pipeline_layout, NULL);
|
||||||
|
|
||||||
for (u32 i = DESC_TYPE_SHARED; i < DESC_TYPE_MAX; i++)
|
for (u32 i = DESC_TYPE_SHARED; i < DESC_TYPE_MAX; i++)
|
||||||
vkDestroyDescriptorSetLayout(device, desc.layouts[i], NULL);
|
vkDestroyDescriptorSetLayout(device, pipe.layouts[i], NULL);
|
||||||
|
|
||||||
vkDestroyDescriptorPool(device, desc.pool, NULL);
|
vkDestroyDescriptorPool(device, pipe.pool, NULL);
|
||||||
|
|
||||||
vkDestroyImageView(device, sc.draw_img.view, NULL);
|
vkDestroyImageView(device, sc.draw_img.view, NULL);
|
||||||
vmaDestroyImage(vma_alloc, sc.draw_img.img, sc.draw_img.alloc);
|
vmaDestroyImage(vma_alloc, sc.draw_img.img, sc.draw_img.alloc);
|
||||||
|
|||||||
@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
#include <vulkan/vulkan.h>
|
#include <vulkan/vulkan.h>
|
||||||
|
|
||||||
|
#include "file_data/spv.c"
|
||||||
|
|
||||||
// Macros
|
// Macros
|
||||||
|
|
||||||
#define VK_DECLARE(fn) static PFN_##fn fn = NULL
|
#define VK_DECLARE(fn) static PFN_##fn fn = NULL
|
||||||
@ -114,6 +116,8 @@ VK_DECLARE(vkResetFences);
|
|||||||
VK_DECLARE(vkResetCommandBuffer);
|
VK_DECLARE(vkResetCommandBuffer);
|
||||||
VK_DECLARE(vkFreeCommandBuffers);
|
VK_DECLARE(vkFreeCommandBuffers);
|
||||||
VK_DECLARE(vkDestroyDescriptorSetLayout);
|
VK_DECLARE(vkDestroyDescriptorSetLayout);
|
||||||
|
VK_DECLARE(vkDestroyShaderModule);
|
||||||
|
VK_DECLARE(vkQueuePresentKHR);
|
||||||
|
|
||||||
// Vulkan Functions END
|
// Vulkan Functions END
|
||||||
|
|
||||||
@ -152,7 +156,8 @@ typedef struct
|
|||||||
VkDescriptorSet sets[DESC_TYPE_MAX];
|
VkDescriptorSet sets[DESC_TYPE_MAX];
|
||||||
DescBindings *bindings;
|
DescBindings *bindings;
|
||||||
u16 bindings_count;
|
u16 bindings_count;
|
||||||
} DescriptorStructures;
|
VkPipeline pipelines[PIPELINE_MAX];
|
||||||
|
} PipelineStructures;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@ -202,6 +207,11 @@ typedef struct {
|
|||||||
Image depth_img;
|
Image depth_img;
|
||||||
} SwapchainStructures;
|
} SwapchainStructures;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
u32 img_ix;
|
||||||
|
u64 frame_cnt;
|
||||||
|
} FrameState;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
Library lib;
|
Library lib;
|
||||||
VkInstance inst;
|
VkInstance inst;
|
||||||
@ -214,7 +224,7 @@ typedef struct {
|
|||||||
FrameStructures frame;
|
FrameStructures frame;
|
||||||
ImmediateStructures imm;
|
ImmediateStructures imm;
|
||||||
SwapchainStructures sc;
|
SwapchainStructures sc;
|
||||||
DescriptorStructures desc;
|
PipelineStructures pipe;
|
||||||
#ifdef BUILD_DEBUG
|
#ifdef BUILD_DEBUG
|
||||||
VkDebugUtilsMessengerEXT debug;
|
VkDebugUtilsMessengerEXT debug;
|
||||||
#endif
|
#endif
|
||||||
@ -222,6 +232,7 @@ typedef struct {
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
Vulkan_t vk;
|
Vulkan_t vk;
|
||||||
|
FrameState frame_state;
|
||||||
Arena *arena;
|
Arena *arena;
|
||||||
Arena *perm_arena;
|
Arena *perm_arena;
|
||||||
} Renderer_t;
|
} Renderer_t;
|
||||||
@ -257,10 +268,15 @@ static b32 CreateSwapchain();
|
|||||||
static VkFormat GetImageFormat();
|
static VkFormat GetImageFormat();
|
||||||
static b32 CreateDescriptors();
|
static b32 CreateDescriptors();
|
||||||
static b32 CreatePipelines();
|
static b32 CreatePipelines();
|
||||||
|
static b32 CreateShaderModule(u8 *bytes, u32 len, VkShaderModule *module);
|
||||||
|
|
||||||
// Destroy
|
// Destroy
|
||||||
static void DestroyVulkan();
|
static void DestroyVulkan();
|
||||||
|
|
||||||
|
// Util
|
||||||
|
static void TransitionImage(VkCommandBuffer cmd, VkImage img, VkImageLayout curr, VkImageLayout new);
|
||||||
|
static void CopyImageToImage(VkCommandBuffer cmd, VkImage src, VkImage dst, VkExtent2D src_ext, VkExtent2D dst_ext);
|
||||||
|
|
||||||
// Renderer Functions Declarations END
|
// Renderer Functions Declarations END
|
||||||
|
|
||||||
#include "vulkan_config.c"
|
#include "vulkan_config.c"
|
||||||
@ -296,5 +312,13 @@ static char *vulkan_libs[] = {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// BACKEND API
|
||||||
|
|
||||||
|
// Init
|
||||||
b32 _InitRenderer(Arena *arena);
|
b32 _InitRenderer(Arena *arena);
|
||||||
void _DestroyRenderer();
|
void _DestroyRenderer();
|
||||||
|
|
||||||
|
// Rendering
|
||||||
|
static b32 _BeginFrame();
|
||||||
|
static void _DrawTriangle();
|
||||||
|
static b32 _FinishFrame();
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
layout (location = 0) out vec3 fragColor;
|
layout (location = 0) out vec3 fragColor;
|
||||||
|
|
||||||
vec2 triangle[3] = vec2[](
|
vec2 positions[3] = vec2[](
|
||||||
vec2(0.0, -0.5),
|
vec2(0.0, -0.5),
|
||||||
vec2(0.5, 0.5),
|
vec2(0.5, 0.5),
|
||||||
vec2(-0.5, 0.5)
|
vec2(-0.5, 0.5)
|
||||||
|
|||||||
57
src/shaders/glsl/structures.glsl
Normal file
57
src/shaders/glsl/structures.glsl
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
// ==========================================
|
||||||
|
// ====== TODO: Research values here ========
|
||||||
|
// ==========================================
|
||||||
|
|
||||||
|
struct Vertex {
|
||||||
|
float uv_x;
|
||||||
|
float uv_y;
|
||||||
|
float x, y, z;
|
||||||
|
};
|
||||||
|
|
||||||
|
layout (set = 0, binding = 0) uniform GlobalUniform {
|
||||||
|
mat4 camera_view;
|
||||||
|
mat4 camera_projection;
|
||||||
|
mat4 camera_view_projection;
|
||||||
|
mat4 camera_view_inverse;
|
||||||
|
mat4 camera_projection_inverse;
|
||||||
|
mat4 camera_previous_view;
|
||||||
|
mat4 camera_previous_projection;
|
||||||
|
vec2 render_resolution;
|
||||||
|
vec2 jitter_offset;
|
||||||
|
float delta;
|
||||||
|
uint frame_count;
|
||||||
|
} Globals;
|
||||||
|
|
||||||
|
layout (set = 0, binding = 1) uniform ShaderOptions {
|
||||||
|
float exposure;
|
||||||
|
float alpha;
|
||||||
|
int debug_display;
|
||||||
|
uint albedo_texture_indices[];
|
||||||
|
} Options;
|
||||||
|
|
||||||
|
layout (rgba16f, set = 0, binding = 2) uniform image2D image;
|
||||||
|
|
||||||
|
layout (set = 1, binding = 0) uniform sampler2D Textures[];
|
||||||
|
|
||||||
|
layout (rgba8_snorm, set = 2, binding = 0) uniform image2D Images[];
|
||||||
|
|
||||||
|
layout (set = 3, binding = 0) uniform PBRMaterials {
|
||||||
|
vec3 albedo;
|
||||||
|
vec3 normal;
|
||||||
|
float metallic;
|
||||||
|
float roughness;
|
||||||
|
float ao;
|
||||||
|
} Materials[];
|
||||||
|
|
||||||
|
|
||||||
|
layout (std430, buffer_reference) readonly buffer VertexBuffer {
|
||||||
|
Vertex vertices[];
|
||||||
|
};
|
||||||
|
|
||||||
|
layout (push_constant) uniform constants {
|
||||||
|
mat4 render_matrix;
|
||||||
|
VertexBuffer vertex_buffer;
|
||||||
|
uint sampler_index;
|
||||||
|
uint image_index;
|
||||||
|
uint material_index;
|
||||||
|
} PC;
|
||||||
Loading…
x
Reference in New Issue
Block a user