diff options
| -rw-r--r-- | sokol_gfx.h | 112 | ||||
| -rw-r--r-- | tests/functional/sokol_gfx_test.c | 26 |
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(); } |