From 00f53b72a1e2e30a19c6e6b70424b10e2e31e267 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Thu, 26 Jun 2025 18:12:50 +0200 Subject: [PATCH] tests/shader_runner_gl: Implement geometry shaders. --- tests/hlsl/geometry.shader_test | 4 ++-- tests/shader_runner_gl.c | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/tests/hlsl/geometry.shader_test b/tests/hlsl/geometry.shader_test index e47a0edc2..f49181046 100644 --- a/tests/hlsl/geometry.shader_test +++ b/tests/hlsl/geometry.shader_test @@ -60,9 +60,9 @@ float4 main(struct ps_data ps_input) : SV_Target } [test] -draw point list 1 +todo(glsl) draw point list 1 bug(mvk) probe rtv 0 (320, 190) rgba(0.0, 0.0, 0.0, 0.0) bug(mvk) probe rtv 0 (255, 240) rgba(0.0, 0.0, 0.0, 0.0) -bug(opengl & llvmpipe | mvk) probe rtv 0 (320, 240) rgba(0.0, 1.0, 1.0, 1.0) +bug(mvk) probe rtv 0 (320, 240) rgba(0.0, 1.0, 1.0, 1.0) bug(mvk) probe rtv 0 (385, 240) rgba(0.0, 0.0, 0.0, 0.0) bug(mvk) probe rtv 0 (320, 290) rgba(0.0, 0.0, 0.0, 0.0) diff --git a/tests/shader_runner_gl.c b/tests/shader_runner_gl.c index de9835223..27db19fcb 100644 --- a/tests/shader_runner_gl.c +++ b/tests/shader_runner_gl.c @@ -857,6 +857,11 @@ static GLuint create_shader(struct gl_runner *runner, enum shader_type shader_ty name = "tessellation evaluation"; break; + case SHADER_TYPE_GS: + gl_shader_type = GL_GEOMETRY_SHADER; + name = "geometry"; + break; + case SHADER_TYPE_CS: gl_shader_type = GL_COMPUTE_SHADER; name = "compute"; @@ -1055,7 +1060,7 @@ static GLenum get_compare_op_gl(D3D12_COMPARISON_FUNC op) static GLuint compile_graphics_shader_program(struct gl_runner *runner, ID3D10Blob **vs_blob) { ID3D10Blob *fs_blob, *hs_blob = NULL, *ds_blob = NULL, *gs_blob = NULL; - GLuint program_id, vs_id, fs_id, hs_id = 0, ds_id = 0; + GLuint program_id, vs_id, fs_id, hs_id = 0, ds_id = 0, gs_id = 0; bool succeeded; GLint status; @@ -1108,6 +1113,14 @@ static GLuint compile_graphics_shader_program(struct gl_runner *runner, ID3D10Bl ds_blob = NULL; } + if (gs_blob) + { + if (!(gs_id = create_shader(runner, SHADER_TYPE_GS, gs_blob))) + goto fail; + ID3D10Blob_Release(gs_blob); + gs_blob = NULL; + } + /* TODO: compile and use the gs blobs too, but currently this * point is not reached because compile_hlsl() fails on these. */ @@ -1118,11 +1131,15 @@ static GLuint compile_graphics_shader_program(struct gl_runner *runner, ID3D10Bl glAttachShader(program_id, hs_id); if (ds_id) glAttachShader(program_id, ds_id); + if (gs_id) + glAttachShader(program_id, gs_id); glLinkProgram(program_id); glGetProgramiv(program_id, GL_LINK_STATUS, &status); ok(status, "Failed to link program.\n"); trace_info_log(program_id, true); + if (gs_id) + glDeleteShader(gs_id); if (ds_id) glDeleteShader(ds_id); if (hs_id)