1010#include " ../paint/palette.h"
1111
1212/* clang-format off */
13- // SPV
14- #include " ../../shaders/generated/fill_frag_spv.h"
15- #include " ../../shaders/generated/fill_vert_spv.h"
16- #include " ../../shaders/generated/tile_clip_combine_frag_spv.h"
17- #include " ../../shaders/generated/tile_clip_combine_vert_spv.h"
18- #include " ../../shaders/generated/tile_clip_copy_frag_spv.h"
19- #include " ../../shaders/generated/tile_clip_copy_vert_spv.h"
20- #include " ../../shaders/generated/tile_frag_spv.h"
21- #include " ../../shaders/generated/tile_vert_spv.h"
22- // GLSL
23- #include " ../../shaders/generated/fill_frag.h"
24- #include " ../../shaders/generated/fill_vert.h"
25- #include " ../../shaders/generated/tile_clip_combine_frag.h"
26- #include " ../../shaders/generated/tile_clip_combine_vert.h"
27- #include " ../../shaders/generated/tile_clip_copy_frag.h"
28- #include " ../../shaders/generated/tile_clip_copy_vert.h"
29- #include " ../../shaders/generated/tile_frag.h"
30- #include " ../../shaders/generated/tile_vert.h"
13+ #include " ../../shaders/generated/fill_frag_shdbin.h"
14+ #include " ../../shaders/generated/fill_vert_shdbin.h"
15+ #include " ../../shaders/generated/tile_clip_combine_frag_shdbin.h"
16+ #include " ../../shaders/generated/tile_clip_combine_vert_shdbin.h"
17+ #include " ../../shaders/generated/tile_clip_copy_frag_shdbin.h"
18+ #include " ../../shaders/generated/tile_clip_copy_vert_shdbin.h"
19+ #include " ../../shaders/generated/tile_frag_shdbin.h"
20+ #include " ../../shaders/generated/tile_vert_shdbin.h"
3121/* clang-format on */
3222
3323#include < array>
@@ -111,16 +101,6 @@ void RendererD3D9::update_tile_batch_storage(uint32_t new_tile_batch_count) {
111101void RendererD3D9::set_up_pipelines () {
112102 // Fill pipeline.
113103 {
114- std::vector<char > fill_vert_source, fill_frag_source;
115-
116- if (device->get_backend_type () == BackendType::Vulkan) {
117- fill_vert_source = std::vector<char >(std::begin (fill_vert_spv), std::end (fill_vert_spv));
118- fill_frag_source = std::vector<char >(std::begin (fill_frag_spv), std::end (fill_frag_spv));
119- } else {
120- fill_vert_source = std::vector<char >(std::begin (fill_vert), std::end (fill_vert));
121- fill_frag_source = std::vector<char >(std::begin (fill_frag), std::end (fill_frag));
122- }
123-
124104 // Set vertex attributes.
125105 std::vector<VertexInputAttributeDescription> attribute_descriptions;
126106 {
@@ -142,8 +122,8 @@ void RendererD3D9::set_up_pipelines() {
142122
143123 {
144124 std::vector<DescriptorLayout> layouts = {
145- DescriptorLayout{0 , ShaderStage::Vertex, DescriptorType::UniformBuffer, " bUniform " },
146- DescriptorLayout{1 , ShaderStage::Fragment, DescriptorType::Sampler, " uAreaLUT " },
125+ DescriptorLayout{0 , ShaderStage::Vertex, DescriptorType::UniformBuffer},
126+ DescriptorLayout{1 , ShaderStage::Fragment, DescriptorType::Sampler},
147127 };
148128
149129 fill_descriptor_set_layout_ = device->create_descriptor_set_layout (layouts);
@@ -155,11 +135,14 @@ void RendererD3D9::set_up_pipelines() {
155135 Descriptor::sampled (1 , allocator->get_texture (area_lut_texture_id), get_default_sampler ()),
156136 });
157137
158- auto fill_vert_shader = device-> create_shader_module (fill_vert_source, ShaderStage::Vertex, " fill vert " );
159- auto fill_frag_shader = device-> create_shader_module (fill_frag_source, ShaderStage::Fragment, " fill frag " );
138+ auto fill_vert_shader = Shader::create_from_shdbin (fill_vert_shdbin, sizeof (fill_vert_shdbin) );
139+ auto fill_frag_shader = Shader::create_from_shdbin (fill_frag_shdbin, sizeof (fill_frag_shdbin) );
160140
161- fill_pipeline = device->create_render_pipeline (fill_vert_shader,
162- fill_frag_shader,
141+ auto fill_vert_shader_module = device->create_shader_module (fill_vert_shader, " fill vert" );
142+ auto fill_frag_shader_module = device->create_shader_module (fill_frag_shader, " fill frag" );
143+
144+ fill_pipeline = device->create_render_pipeline (fill_vert_shader_module,
145+ fill_frag_shader_module,
163146 attribute_descriptions,
164147 BlendState::from_equal (),
165148 fill_descriptor_set_layout_,
@@ -169,21 +152,9 @@ void RendererD3D9::set_up_pipelines() {
169152
170153 // Tile pipeline.
171154 {
172- std::vector<char > tile_vert_source, tile_frag_source;
173-
174- if (device->get_backend_type () == BackendType::Vulkan) {
175- tile_vert_source = std::vector<char >(std::begin (tile_vert_spv), std::end (tile_vert_spv));
176- tile_frag_source = std::vector<char >(std::begin (tile_frag_spv), std::end (tile_frag_spv));
177- } else {
178- tile_vert_source = std::vector<char >(std::begin (tile_vert), std::end (tile_vert));
179- tile_frag_source = std::vector<char >(std::begin (tile_frag), std::end (tile_frag));
180- }
181-
182155 // Set vertex attributes.
183156 std::vector<VertexInputAttributeDescription> attribute_descriptions;
184157 {
185- attribute_descriptions.reserve (6 );
186-
187158 // Quad vertex.
188159 attribute_descriptions.push_back ({0 , 2 , DataType::u16 , 2 * sizeof (uint16_t ), 0 , VertexInputRate::Vertex});
189160
@@ -204,25 +175,28 @@ void RendererD3D9::set_up_pipelines() {
204175
205176 {
206177 std::vector<DescriptorLayout> layouts = {
207- DescriptorLayout{0 , ShaderStage::Vertex, DescriptorType::Sampler, " uTextureMetadata " },
208- DescriptorLayout{1 , ShaderStage::Vertex, DescriptorType::Sampler, " uZBuffer " },
209- DescriptorLayout{2 , ShaderStage::VertexAndFragment, DescriptorType::UniformBuffer, " bUniform " },
210- DescriptorLayout{3 , ShaderStage::Fragment, DescriptorType::Sampler, " uColorTexture0 " },
211- DescriptorLayout{4 , ShaderStage::Fragment, DescriptorType::Sampler, " uMaskTexture0 " },
212- DescriptorLayout{5 , ShaderStage::Fragment, DescriptorType::Sampler, " uDestTexture " },
213- DescriptorLayout{6 , ShaderStage::Fragment, DescriptorType::Sampler, " uGammaLUT " },
178+ DescriptorLayout{0 , ShaderStage::Vertex, DescriptorType::Sampler},
179+ DescriptorLayout{1 , ShaderStage::Vertex, DescriptorType::Sampler},
180+ DescriptorLayout{2 , ShaderStage::VertexAndFragment, DescriptorType::UniformBuffer},
181+ DescriptorLayout{3 , ShaderStage::Fragment, DescriptorType::Sampler},
182+ DescriptorLayout{4 , ShaderStage::Fragment, DescriptorType::Sampler},
183+ DescriptorLayout{5 , ShaderStage::Fragment, DescriptorType::Sampler},
184+ DescriptorLayout{6 , ShaderStage::Fragment, DescriptorType::Sampler},
214185 };
215186
216187 tile_descriptor_set_layout_ = device->create_descriptor_set_layout (layouts);
217188 }
218189
219190 update_tile_batch_storage (DEFAULT_TILE_BATCH_COUNT );
220191
221- auto tile_vert_shader = device->create_shader_module (tile_vert_source, ShaderStage::Vertex, " tile vert" );
222- auto tile_frag_shader = device->create_shader_module (tile_frag_source, ShaderStage::Fragment, " tile frag" );
192+ auto tile_vert_shader = Shader::create_from_shdbin (tile_vert_shdbin, sizeof (tile_vert_shdbin));
193+ auto tile_frag_shader = Shader::create_from_shdbin (tile_frag_shdbin, sizeof (tile_frag_shdbin));
194+
195+ auto tile_vert_shader_module = device->create_shader_module (tile_vert_shader, " tile vert" );
196+ auto tile_frag_shader_module = device->create_shader_module (tile_frag_shader, " tile frag" );
223197
224- tile_pipeline = device->create_render_pipeline (tile_vert_shader ,
225- tile_frag_shader ,
198+ tile_pipeline = device->create_render_pipeline (tile_vert_shader_module ,
199+ tile_frag_shader_module ,
226200 attribute_descriptions,
227201 BlendState::from_over (),
228202 tile_descriptor_set_layout_,
@@ -265,18 +239,6 @@ void RendererD3D9::reallocate_alpha_tile_pages_if_necessary() {
265239}
266240
267241void RendererD3D9::create_tile_clip_copy_pipeline () {
268- std::vector<char > tile_clip_copy_vert_source, tile_clip_copy_frag_source;
269-
270- if (device->get_backend_type () == BackendType::Vulkan) {
271- tile_clip_copy_vert_source =
272- std::vector<char >(std::begin (tile_clip_copy_vert_spv), std::end (tile_clip_copy_vert_spv));
273- tile_clip_copy_frag_source =
274- std::vector<char >(std::begin (tile_clip_copy_frag_spv), std::end (tile_clip_copy_frag_spv));
275- } else {
276- tile_clip_copy_vert_source = std::vector<char >(std::begin (tile_clip_copy_vert), std::end (tile_clip_copy_vert));
277- tile_clip_copy_frag_source = std::vector<char >(std::begin (tile_clip_copy_frag), std::end (tile_clip_copy_frag));
278- }
279-
280242 // Set vertex attributes.
281243 std::vector<VertexInputAttributeDescription> attribute_descriptions;
282244 {
@@ -290,8 +252,8 @@ void RendererD3D9::create_tile_clip_copy_pipeline() {
290252
291253 {
292254 std::vector<DescriptorLayout> layouts = {
293- DescriptorLayout{0 , ShaderStage::Vertex, DescriptorType::UniformBuffer, " bUniform " },
294- DescriptorLayout{1 , ShaderStage::Fragment, DescriptorType::Sampler, " uSrc " },
255+ DescriptorLayout{0 , ShaderStage::Vertex, DescriptorType::UniformBuffer},
256+ DescriptorLayout{1 , ShaderStage::Fragment, DescriptorType::Sampler},
295257 };
296258
297259 tile_clip_copy_descriptor_set_layout_ = device->create_descriptor_set_layout (layouts);
@@ -303,14 +265,15 @@ void RendererD3D9::create_tile_clip_copy_pipeline() {
303265 Descriptor::uniform (0 , allocator->get_buffer (fill_ub_id)),
304266 });
305267
306- auto tile_clip_copy_vert_shader =
307- device->create_shader_module (tile_clip_copy_vert_source, ShaderStage::Vertex, " tile clip copy vert" );
308- auto tile_clip_copy_frag_shader =
309- device->create_shader_module (tile_clip_copy_frag_source, ShaderStage::Fragment, " tile clip copy frag" );
268+ auto vert_shader = Shader::create_from_shdbin (tile_clip_copy_vert_shdbin, sizeof (tile_clip_copy_vert_shdbin));
269+ auto frag_shader = Shader::create_from_shdbin (tile_clip_copy_frag_shdbin, sizeof (tile_clip_copy_frag_shdbin));
270+
271+ auto vert_shader_module = device->create_shader_module (vert_shader, " tile clip copy vert" );
272+ auto frag_shader_module = device->create_shader_module (frag_shader, " tile clip copy frag" );
310273
311274 // We have to disable blend for tile clip copy.
312- tile_clip_copy_pipeline = device->create_render_pipeline (tile_clip_copy_vert_shader ,
313- tile_clip_copy_frag_shader ,
275+ tile_clip_copy_pipeline = device->create_render_pipeline (vert_shader_module ,
276+ frag_shader_module ,
314277 attribute_descriptions,
315278 {false },
316279 tile_clip_copy_descriptor_set_layout_,
@@ -319,15 +282,6 @@ void RendererD3D9::create_tile_clip_copy_pipeline() {
319282}
320283
321284void RendererD3D9::create_tile_clip_combine_pipeline () {
322- std::vector<char > vert_source, frag_source;
323- if (device->get_backend_type () == BackendType::Vulkan) {
324- vert_source = std::vector<char >(std::begin (tile_clip_combine_vert_spv), std::end (tile_clip_combine_vert_spv));
325- frag_source = std::vector<char >(std::begin (tile_clip_combine_frag_spv), std::end (tile_clip_combine_frag_spv));
326- } else {
327- vert_source = std::vector<char >(std::begin (tile_clip_combine_vert), std::end (tile_clip_combine_vert));
328- frag_source = std::vector<char >(std::begin (tile_clip_combine_frag), std::end (tile_clip_combine_frag));
329- }
330-
331285 // Set vertex attributes.
332286 std::vector<VertexInputAttributeDescription> attribute_descriptions;
333287 {
@@ -347,8 +301,8 @@ void RendererD3D9::create_tile_clip_combine_pipeline() {
347301
348302 {
349303 std::vector<DescriptorLayout> layouts = {
350- DescriptorLayout{0 , ShaderStage::Vertex, DescriptorType::UniformBuffer, " bUniform " },
351- DescriptorLayout{1 , ShaderStage::Fragment, DescriptorType::Sampler, " uSrc " },
304+ DescriptorLayout{0 , ShaderStage::Vertex, DescriptorType::UniformBuffer},
305+ DescriptorLayout{1 , ShaderStage::Fragment, DescriptorType::Sampler},
352306 };
353307
354308 tile_clip_combine_descriptor_set_layout_ = device->create_descriptor_set_layout (layouts);
@@ -360,14 +314,15 @@ void RendererD3D9::create_tile_clip_combine_pipeline() {
360314 Descriptor::uniform (0 , allocator->get_buffer (fill_ub_id)),
361315 });
362316
363- auto tile_clip_combine_vert_shader =
364- device->create_shader_module (vert_source, ShaderStage::Vertex, " tile clip combine vert" );
365- auto tile_clip_combine_frag_shader =
366- device->create_shader_module (frag_source, ShaderStage::Fragment, " tile clip combine frag" );
317+ auto vert_shader = Shader::create_from_shdbin (tile_clip_combine_vert_shdbin, sizeof (tile_clip_combine_vert_shdbin));
318+ auto frag_shader = Shader::create_from_shdbin (tile_clip_combine_frag_shdbin, sizeof (tile_clip_combine_frag_shdbin));
319+
320+ auto vert_shader_module = device->create_shader_module (vert_shader, " tile clip combine vert" );
321+ auto frag_shader_module = device->create_shader_module (frag_shader, " tile clip combine frag" );
367322
368323 // We have to disable blend for tile clip combine.
369- tile_clip_combine_pipeline = device->create_render_pipeline (tile_clip_combine_vert_shader ,
370- tile_clip_combine_frag_shader ,
324+ tile_clip_combine_pipeline = device->create_render_pipeline (vert_shader_module ,
325+ frag_shader_module ,
371326 attribute_descriptions,
372327 {false },
373328 tile_clip_combine_descriptor_set_layout_,
0 commit comments