103 const SDL_GPUVertexBufferDescription vbuf_desc = {
106 .input_rate = SDL_GPU_VERTEXINPUTRATE_VERTEX,
109 const SDL_GPUVertexAttribute attrs[] = {
110 {0, 0, SDL_GPU_VERTEXELEMENTFORMAT_FLOAT3, 0},
111 {1, 0, SDL_GPU_VERTEXELEMENTFORMAT_FLOAT, offsetof(
DTTR_Vertex, rhw)},
112 {2, 0, SDL_GPU_VERTEXELEMENTFORMAT_FLOAT4, offsetof(
DTTR_Vertex,
r)},
113 {3, 0, SDL_GPU_VERTEXELEMENTFORMAT_FLOAT2, offsetof(
DTTR_Vertex, u)},
116 const SDL_GPUTextureFormat swapchain_fmt = SDL_GetGPUSwapchainTextureFormat(
121 const SDL_GPUColorTargetDescription color_targets[3] = {
122 {.format = swapchain_fmt, .blend_state = {.enable_blend =
false}},
123 {.format = swapchain_fmt,
126 .enable_blend =
true,
127 .src_color_blendfactor = SDL_GPU_BLENDFACTOR_SRC_ALPHA,
128 .dst_color_blendfactor = SDL_GPU_BLENDFACTOR_ONE_MINUS_SRC_ALPHA,
129 .color_blend_op = SDL_GPU_BLENDOP_ADD,
130 .src_alpha_blendfactor = SDL_GPU_BLENDFACTOR_ONE,
131 .dst_alpha_blendfactor = SDL_GPU_BLENDFACTOR_ONE_MINUS_SRC_ALPHA,
132 .alpha_blend_op = SDL_GPU_BLENDOP_ADD,
134 {.format = swapchain_fmt,
136 .enable_blend =
true,
137 .src_color_blendfactor = SDL_GPU_BLENDFACTOR_SRC_ALPHA,
138 .dst_color_blendfactor = SDL_GPU_BLENDFACTOR_ONE,
139 .color_blend_op = SDL_GPU_BLENDOP_ADD,
140 .src_alpha_blendfactor = SDL_GPU_BLENDFACTOR_ONE,
141 .dst_alpha_blendfactor = SDL_GPU_BLENDFACTOR_ONE,
142 .alpha_blend_op = SDL_GPU_BLENDOP_ADD,
146 for (
int bmode = 0; bmode < 3; bmode++) {
147 for (
int dtest = 0; dtest < 2; dtest++) {
148 for (
int dwrite = 0; dwrite < 2; dwrite++) {
149 const SDL_GPUGraphicsPipelineCreateInfo pipe_info = {
150 .vertex_shader = vert,
151 .fragment_shader = frag,
152 .vertex_input_state =
154 .vertex_buffer_descriptions = &vbuf_desc,
155 .num_vertex_buffers = 1,
156 .vertex_attributes = attrs,
159 .primitive_type = SDL_GPU_PRIMITIVETYPE_TRIANGLELIST,
162 .fill_mode = SDL_GPU_FILLMODE_FILL,
163 .cull_mode = SDL_GPU_CULLMODE_NONE,
164 .front_face = SDL_GPU_FRONTFACE_COUNTER_CLOCKWISE,
168 .sample_count =
state->msaa_sample_count,
170 .enable_mask =
false,
172 .depth_stencil_state =
174 .enable_depth_test = dtest,
175 .enable_depth_write = dwrite,
176 .compare_op = dtest ? SDL_GPU_COMPAREOP_LESS_OR_EQUAL
177 : SDL_GPU_COMPAREOP_ALWAYS,
180 .color_target_descriptions = &color_targets[bmode],
181 .num_color_targets = 1,
182 .has_depth_stencil_target =
true,
183 .depth_stencil_format = SDL_GPU_TEXTUREFORMAT_D32_FLOAT,
188 state->pipelines[idx] = SDL_CreateGPUGraphicsPipeline(
193 if (
state->pipelines[idx]) {
197 DTTR_LOG_ERROR(
"Failed to create pipeline[%d]: %s", idx, SDL_GetError());