diff options
| author | Andre Weissflog <floooh@gmail.com> | 2023-02-19 18:11:13 +0100 |
|---|---|---|
| committer | Andre Weissflog <floooh@gmail.com> | 2023-02-19 18:11:13 +0100 |
| commit | 7413a37f886b6d8b54d11f9b945cb74164884a9b (patch) | |
| tree | dc15809fb52fc1687162d4181bab0d94c928c38c | |
| parent | 74115e51793ae694d91196d99ac8b5e794f7afef (diff) | |
sokol_gfx.h: implement sg_query_pass_desc()
| -rw-r--r-- | sokol_gfx.h | 18 | ||||
| -rw-r--r-- | tests/functional/sokol_gfx_test.c | 44 |
2 files changed, 62 insertions, 0 deletions
diff --git a/sokol_gfx.h b/sokol_gfx.h index 6300382b..2847a386 100644 --- a/sokol_gfx.h +++ b/sokol_gfx.h @@ -16973,6 +16973,24 @@ SOKOL_API_IMPL sg_pipeline_desc sg_query_pipeline_desc(sg_pipeline pip_id) { return desc; } +SOKOL_API_IMPL sg_pass_desc sg_query_pass_desc(sg_pass pass_id) { + SOKOL_ASSERT(_sg.valid); + sg_pass_desc desc; + _sg_clear(&desc, sizeof(desc)); + const _sg_pass_t* pass = _sg_lookup_pass(&_sg.pools, pass_id.id); + if (pass) { + for (int i = 0; i < pass->cmn.num_color_atts; i++) { + desc.color_attachments[i].image = pass->cmn.color_atts[i].image_id; + desc.color_attachments[i].mip_level = pass->cmn.color_atts[i].mip_level; + desc.color_attachments[i].slice = pass->cmn.color_atts[i].slice; + } + desc.depth_stencil_attachment.image = pass->cmn.ds_att.image_id; + desc.depth_stencil_attachment.mip_level = pass->cmn.ds_att.mip_level; + desc.depth_stencil_attachment.slice = pass->cmn.ds_att.slice; + } + return desc; +} + SOKOL_API_IMPL sg_buffer_desc sg_query_buffer_defaults(const sg_buffer_desc* desc) { SOKOL_ASSERT(_sg.valid && desc); return _sg_buffer_desc_defaults(desc); diff --git a/tests/functional/sokol_gfx_test.c b/tests/functional/sokol_gfx_test.c index 4ab88e4c..f0fb5501 100644 --- a/tests/functional/sokol_gfx_test.c +++ b/tests/functional/sokol_gfx_test.c @@ -1060,6 +1060,50 @@ UTEST(sokol_gfx, query_pipeline_desc) { sg_shutdown(); } +UTEST(sokol_gfx, query_pass_desc) { + setup(&(sg_desc){0}); + + const sg_image_desc color_img_desc = { + .render_target = true, + .width = 128, + .height = 128, + }; + const sg_image_desc depth_img_desc = { + .render_target = true, + .width = 128, + .height = 128, + .pixel_format = SG_PIXELFORMAT_DEPTH, + }; + sg_image color_img_0 = sg_make_image(&color_img_desc); + sg_image color_img_1 = sg_make_image(&color_img_desc); + sg_image color_img_2 = sg_make_image(&color_img_desc); + sg_image depth_img = sg_make_image(&depth_img_desc); + + sg_pass p0 = sg_make_pass(&(sg_pass_desc){ + .color_attachments = { + [0].image = color_img_0, + [1].image = color_img_1, + [2].image = color_img_2, + }, + .depth_stencil_attachment.image = depth_img, + }); + const sg_pass_desc p0_desc = sg_query_pass_desc(p0); + T(p0_desc.color_attachments[0].image.id == color_img_0.id); + T(p0_desc.color_attachments[0].mip_level == 0); + T(p0_desc.color_attachments[0].slice == 0); + T(p0_desc.color_attachments[1].image.id == color_img_1.id); + T(p0_desc.color_attachments[1].mip_level == 0); + T(p0_desc.color_attachments[1].slice == 0); + T(p0_desc.color_attachments[2].image.id == color_img_2.id); + T(p0_desc.color_attachments[2].mip_level == 0); + T(p0_desc.color_attachments[2].slice == 0); + T(p0_desc.depth_stencil_attachment.image.id == depth_img.id); + T(p0_desc.depth_stencil_attachment.mip_level == 0); + T(p0_desc.depth_stencil_attachment.slice == 0); + + sg_shutdown(); +} + UTEST(sokol_gfx, buffer_resource_states) { setup(&(sg_desc){0}); sg_buffer buf = sg_alloc_buffer(); |