vkd3d-shader/glsl: Add vkd3d-shader version information to the generated shader.

This commit is contained in:
Henri Verbeet 2021-10-21 19:28:22 +02:00 committed by Alexandre Julliard
parent 3205e08fb1
commit 414bb99542
Notes: Alexandre Julliard 2024-04-19 22:27:27 +02:00
Approved-by: Giovanni Mascellani (@giomasce)
Approved-by: Alexandre Julliard (@julliard)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/803

View File

@ -89,35 +89,39 @@ static void vkd3d_glsl_handle_instruction(struct vkd3d_glsl_generator *generator
} }
} }
static int vkd3d_glsl_generator_generate(struct vkd3d_glsl_generator *generator, struct vkd3d_shader_code *out) static int vkd3d_glsl_generator_generate(struct vkd3d_glsl_generator *gen, struct vkd3d_shader_code *out)
{ {
const struct vkd3d_shader_instruction_array *instructions = &generator->program->instructions; const struct vkd3d_shader_instruction_array *instructions = &gen->program->instructions;
struct vkd3d_string_buffer *buffer = &gen->buffer;
unsigned int i; unsigned int i;
void *code; void *code;
ERR("Generating a GLSL shader. This is unsupported; you get to keep all the pieces if it breaks.\n"); ERR("Generating a GLSL shader. This is unsupported; you get to keep all the pieces if it breaks.\n");
vkd3d_string_buffer_printf(&generator->buffer, "#version 440\n\n"); vkd3d_string_buffer_printf(buffer, "#version 440\n\n");
vkd3d_string_buffer_printf(&generator->buffer, "void main()\n{\n");
++generator->indent; vkd3d_string_buffer_printf(buffer, "/* Generated by %s. */\n\n", vkd3d_shader_get_version(NULL, NULL));
vkd3d_string_buffer_printf(buffer, "void main()\n{\n");
++gen->indent;
for (i = 0; i < instructions->count; ++i) for (i = 0; i < instructions->count; ++i)
{ {
vkd3d_glsl_handle_instruction(generator, &instructions->elements[i]); vkd3d_glsl_handle_instruction(gen, &instructions->elements[i]);
} }
vkd3d_string_buffer_printf(&generator->buffer, "}\n"); vkd3d_string_buffer_printf(buffer, "}\n");
if (TRACE_ON()) if (TRACE_ON())
vkd3d_string_buffer_trace(&generator->buffer); vkd3d_string_buffer_trace(buffer);
if (generator->failed) if (gen->failed)
return VKD3D_ERROR_INVALID_SHADER; return VKD3D_ERROR_INVALID_SHADER;
if ((code = vkd3d_malloc(generator->buffer.buffer_size))) if ((code = vkd3d_malloc(buffer->buffer_size)))
{ {
memcpy(code, generator->buffer.buffer, generator->buffer.content_size); memcpy(code, buffer->buffer, buffer->content_size);
out->size = generator->buffer.content_size; out->size = buffer->content_size;
out->code = code; out->code = code;
} }
else return VKD3D_ERROR_OUT_OF_MEMORY; else return VKD3D_ERROR_OUT_OF_MEMORY;