summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Weissflog <floooh@gmail.com>2023-02-19 18:11:13 +0100
committerAndre Weissflog <floooh@gmail.com>2023-02-19 18:11:13 +0100
commit7413a37f886b6d8b54d11f9b945cb74164884a9b (patch)
treedc15809fb52fc1687162d4181bab0d94c928c38c
parent74115e51793ae694d91196d99ac8b5e794f7afef (diff)
sokol_gfx.h: implement sg_query_pass_desc()
-rw-r--r--sokol_gfx.h18
-rw-r--r--tests/functional/sokol_gfx_test.c44
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();