aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sokol_gfx.h112
-rw-r--r--tests/functional/sokol_gfx_test.c26
2 files changed, 138 insertions, 0 deletions
diff --git a/sokol_gfx.h b/sokol_gfx.h
index c66852e1..b701e35e 100644
--- a/sokol_gfx.h
+++ b/sokol_gfx.h
@@ -4249,6 +4249,18 @@ SOKOL_GFX_API_DECL sg_sampler_desc sg_query_sampler_defaults(const sg_sampler_de
SOKOL_GFX_API_DECL sg_shader_desc sg_query_shader_defaults(const sg_shader_desc* desc);
SOKOL_GFX_API_DECL sg_pipeline_desc sg_query_pipeline_defaults(const sg_pipeline_desc* desc);
SOKOL_GFX_API_DECL sg_attachments_desc sg_query_attachments_defaults(const sg_attachments_desc* desc);
+// assorted query functions
+SOKOL_GFX_API_DECL size_t sg_query_buffer_size(sg_buffer buf);
+SOKOL_GFX_API_DECL sg_buffer_type sg_query_buffer_type(sg_buffer buf);
+SOKOL_GFX_API_DECL sg_usage sg_query_buffer_usage(sg_buffer buf);
+SOKOL_GFX_API_DECL sg_image_type sg_query_image_type(sg_image img);
+SOKOL_GFX_API_DECL int sg_query_image_width(sg_image img);
+SOKOL_GFX_API_DECL int sg_query_image_height(sg_image img);
+SOKOL_GFX_API_DECL int sg_query_image_num_slices(sg_image img);
+SOKOL_GFX_API_DECL int sg_query_image_num_mipmaps(sg_image img);
+SOKOL_GFX_API_DECL sg_pixel_format sg_query_image_pixelformat(sg_image img);
+SOKOL_GFX_API_DECL sg_usage sg_query_image_usage(sg_image img);
+SOKOL_GFX_API_DECL int sg_query_image_sample_count(sg_image img);
// separate resource allocation and initialization (for async setup)
SOKOL_GFX_API_DECL sg_buffer sg_alloc_buffer(void);
@@ -19228,6 +19240,33 @@ SOKOL_API_IMPL sg_buffer_desc sg_query_buffer_desc(sg_buffer buf_id) {
return desc;
}
+SOKOL_API_IMPL size_t sg_query_buffer_size(sg_buffer buf_id) {
+ SOKOL_ASSERT(_sg.valid);
+ const _sg_buffer_t* buf = _sg_lookup_buffer(&_sg.pools, buf_id.id);
+ if (buf) {
+ return (size_t)buf->cmn.size;
+ }
+ return 0;
+}
+
+SOKOL_API_IMPL sg_buffer_type sg_query_buffer_type(sg_buffer buf_id) {
+ SOKOL_ASSERT(_sg.valid);
+ const _sg_buffer_t* buf = _sg_lookup_buffer(&_sg.pools, buf_id.id);
+ if (buf) {
+ return buf->cmn.type;
+ }
+ return _SG_BUFFERTYPE_DEFAULT;
+}
+
+SOKOL_API_IMPL sg_usage sg_query_buffer_usage(sg_buffer buf_id) {
+ SOKOL_ASSERT(_sg.valid);
+ const _sg_buffer_t* buf = _sg_lookup_buffer(&_sg.pools, buf_id.id);
+ if (buf) {
+ return buf->cmn.usage;
+ }
+ return _SG_USAGE_DEFAULT;
+}
+
SOKOL_API_IMPL sg_image_desc sg_query_image_desc(sg_image img_id) {
SOKOL_ASSERT(_sg.valid);
sg_image_desc desc;
@@ -19247,6 +19286,79 @@ SOKOL_API_IMPL sg_image_desc sg_query_image_desc(sg_image img_id) {
return desc;
}
+SOKOL_API_IMPL sg_image_type sg_query_image_type(sg_image img_id) {
+ SOKOL_ASSERT(_sg.valid);
+ const _sg_image_t* img = _sg_lookup_image(&_sg.pools, img_id.id);
+ if (img) {
+ return img->cmn.type;
+ }
+ return _SG_IMAGETYPE_DEFAULT;
+}
+
+SOKOL_API_IMPL int sg_query_image_width(sg_image img_id) {
+ SOKOL_ASSERT(_sg.valid);
+ const _sg_image_t* img = _sg_lookup_image(&_sg.pools, img_id.id);
+ if (img) {
+ return img->cmn.width;
+ }
+ return 0;
+}
+
+SOKOL_API_IMPL int sg_query_image_height(sg_image img_id) {
+ SOKOL_ASSERT(_sg.valid);
+ const _sg_image_t* img = _sg_lookup_image(&_sg.pools, img_id.id);
+ if (img) {
+ return img->cmn.height;
+ }
+ return 0;
+}
+
+SOKOL_API_IMPL int sg_query_image_num_slices(sg_image img_id) {
+ SOKOL_ASSERT(_sg.valid);
+ const _sg_image_t* img = _sg_lookup_image(&_sg.pools, img_id.id);
+ if (img) {
+ return img->cmn.num_slices;
+ }
+ return 0;
+}
+
+SOKOL_API_IMPL int sg_query_image_num_mipmaps(sg_image img_id) {
+ SOKOL_ASSERT(_sg.valid);
+ const _sg_image_t* img = _sg_lookup_image(&_sg.pools, img_id.id);
+ if (img) {
+ return img->cmn.num_mipmaps;
+ }
+ return 0;
+}
+
+SOKOL_API_IMPL sg_pixel_format sg_query_image_pixelformat(sg_image img_id) {
+ SOKOL_ASSERT(_sg.valid);
+ const _sg_image_t* img = _sg_lookup_image(&_sg.pools, img_id.id);
+ if (img) {
+ return img->cmn.pixel_format;
+ }
+ return _SG_PIXELFORMAT_DEFAULT;
+}
+
+SOKOL_API_IMPL sg_usage sg_query_image_usage(sg_image img_id) {
+ SOKOL_ASSERT(_sg.valid);
+ const _sg_image_t* img = _sg_lookup_image(&_sg.pools, img_id.id);
+ if (img) {
+ return img->cmn.usage;
+ }
+ return _SG_USAGE_DEFAULT;
+}
+
+SOKOL_API_IMPL int sg_query_image_sample_count(sg_image img_id) {
+ SOKOL_ASSERT(_sg.valid);
+ SOKOL_ASSERT(_sg.valid);
+ const _sg_image_t* img = _sg_lookup_image(&_sg.pools, img_id.id);
+ if (img) {
+ return img->cmn.sample_count;
+ }
+ return 0;
+}
+
SOKOL_API_IMPL sg_sampler_desc sg_query_sampler_desc(sg_sampler smp_id) {
SOKOL_ASSERT(_sg.valid);
sg_sampler_desc desc;
diff --git a/tests/functional/sokol_gfx_test.c b/tests/functional/sokol_gfx_test.c
index 85b7c95f..2f3fadb7 100644
--- a/tests/functional/sokol_gfx_test.c
+++ b/tests/functional/sokol_gfx_test.c
@@ -918,6 +918,9 @@ UTEST(sokol_gfx, query_buffer_desc) {
T(b0_desc.mtl_buffers[0] == 0);
T(b0_desc.d3d11_buffer == 0);
T(b0_desc.wgpu_buffer == 0);
+ T(sg_query_buffer_size(b0) == 32);
+ T(sg_query_buffer_type(b0) == SG_BUFFERTYPE_VERTEXBUFFER);
+ T(sg_query_buffer_usage(b0) == SG_USAGE_STREAM);
float vtx_data[16];
sg_buffer b1 = sg_make_buffer(&(sg_buffer_desc){
@@ -929,6 +932,9 @@ UTEST(sokol_gfx, query_buffer_desc) {
T(b1_desc.usage == SG_USAGE_IMMUTABLE);
T(b1_desc.data.ptr == 0);
T(b1_desc.data.size == 0);
+ T(sg_query_buffer_size(b1) == sizeof(vtx_data));
+ T(sg_query_buffer_type(b1) == SG_BUFFERTYPE_VERTEXBUFFER);
+ T(sg_query_buffer_usage(b1) == SG_USAGE_IMMUTABLE);
uint16_t idx_data[8];
sg_buffer b2 = sg_make_buffer(&(sg_buffer_desc){
@@ -941,6 +947,9 @@ UTEST(sokol_gfx, query_buffer_desc) {
T(b2_desc.usage == SG_USAGE_IMMUTABLE);
T(b2_desc.data.ptr == 0);
T(b2_desc.data.size == 0);
+ T(sg_query_buffer_size(b2) == sizeof(idx_data));
+ T(sg_query_buffer_type(b2) == SG_BUFFERTYPE_INDEXBUFFER);
+ T(sg_query_buffer_usage(b2) == SG_USAGE_IMMUTABLE);
// invalid buffer (returns zeroed desc)
sg_buffer b3 = sg_make_buffer(&(sg_buffer_desc){
@@ -953,6 +962,9 @@ UTEST(sokol_gfx, query_buffer_desc) {
T(b3_desc.size == 0);
T(b3_desc.type == 0);
T(b3_desc.usage == 0);
+ T(sg_query_buffer_size(b3) == 0);
+ T(sg_query_buffer_type(b3) == _SG_BUFFERTYPE_DEFAULT);
+ T(sg_query_buffer_usage(b3) == _SG_USAGE_DEFAULT);
sg_shutdown();
}
@@ -984,6 +996,13 @@ UTEST(sokol_gfx, query_image_desc) {
T(i0_desc.d3d11_texture == 0);
T(i0_desc.d3d11_shader_resource_view == 0);
T(i0_desc.wgpu_texture == 0);
+ T(sg_query_image_type(i0) == SG_IMAGETYPE_2D);
+ T(sg_query_image_width(i0) == 256);
+ T(sg_query_image_height(i0) == 512);
+ T(sg_query_image_num_slices(i0) == 1);
+ T(sg_query_image_num_mipmaps(i0) == 1);
+ T(sg_query_image_pixelformat(i0) == SG_PIXELFORMAT_R8);
+ T(sg_query_image_sample_count(i0) == 1);
sg_destroy_image(i0);
const sg_image_desc i0_desc_x = sg_query_image_desc(i0);
@@ -996,6 +1015,13 @@ UTEST(sokol_gfx, query_image_desc) {
T(i0_desc_x.usage == 0);
T(i0_desc_x.pixel_format == 0);
T(i0_desc_x.sample_count == 0);
+ T(sg_query_image_type(i0) == _SG_IMAGETYPE_DEFAULT);
+ T(sg_query_image_width(i0) == 0);
+ T(sg_query_image_height(i0) == 0);
+ T(sg_query_image_num_slices(i0) == 0);
+ T(sg_query_image_num_mipmaps(i0) == 0);
+ T(sg_query_image_pixelformat(i0) == _SG_PIXELFORMAT_DEFAULT);
+ T(sg_query_image_sample_count(i0) == 0);
sg_shutdown();
}