aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sokol_gfx.h32
-rw-r--r--tests/functional/sokol_gfx_test.c70
2 files changed, 102 insertions, 0 deletions
diff --git a/sokol_gfx.h b/sokol_gfx.h
index a19f00c5..c7dc9ddb 100644
--- a/sokol_gfx.h
+++ b/sokol_gfx.h
@@ -3778,6 +3778,8 @@ typedef struct {
sg_wrap wrap_w;
sg_border_color border_color;
uint32_t max_anisotropy;
+ float min_lod;
+ float max_lod;
} _sg_image_common_t;
_SOKOL_PRIVATE void _sg_image_common_init(_sg_image_common_t* cmn, const sg_image_desc* desc) {
@@ -3800,6 +3802,8 @@ _SOKOL_PRIVATE void _sg_image_common_init(_sg_image_common_t* cmn, const sg_imag
cmn->wrap_w = desc->wrap_w;
cmn->border_color = desc->border_color;
cmn->max_anisotropy = desc->max_anisotropy;
+ cmn->min_lod = desc->min_lod;
+ cmn->max_lod = desc->max_lod;
}
typedef struct {
@@ -16879,6 +16883,34 @@ SOKOL_API_IMPL sg_buffer_desc sg_query_buffer_desc(sg_buffer buf_id) {
return desc;
}
+SOKOL_API_IMPL sg_image_desc sg_query_image_desc(sg_image img_id) {
+ SOKOL_ASSERT(_sg.valid);
+ sg_image_desc desc;
+ _sg_clear(&desc, sizeof(desc));
+ const _sg_image_t* img = _sg_lookup_image(&_sg.pools, img_id.id);
+ if (img) {
+ desc.type = img->cmn.type;
+ desc.render_target = img->cmn.render_target;
+ desc.width = img->cmn.width;
+ desc.height = img->cmn.height;
+ desc.num_slices = img->cmn.num_slices;
+ desc.num_mipmaps = img->cmn.num_mipmaps;
+ desc.usage = img->cmn.usage;
+ desc.pixel_format = img->cmn.pixel_format;
+ desc.sample_count = img->cmn.sample_count;
+ desc.min_filter = img->cmn.min_filter;
+ desc.mag_filter = img->cmn.mag_filter;
+ desc.wrap_u = img->cmn.wrap_u;
+ desc.wrap_v = img->cmn.wrap_v;
+ desc.wrap_w = img->cmn.wrap_w;
+ desc.border_color = img->cmn.border_color;
+ desc.max_anisotropy = img->cmn.max_anisotropy;
+ desc.min_lod = img->cmn.min_lod;
+ desc.max_lod = img->cmn.max_lod;
+ }
+ 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 1f88c60e..a9e0d0e5 100644
--- a/tests/functional/sokol_gfx_test.c
+++ b/tests/functional/sokol_gfx_test.c
@@ -856,6 +856,76 @@ UTEST(sokol_gfx, query_buffer_desc) {
T(b2_desc.data.ptr == 0);
T(b2_desc.data.size == 0);
+ // invalid buffer (returns zeroed desc)
+ sg_buffer b3 = sg_make_buffer(&(sg_buffer_desc){
+ .size = 32,
+ .usage = SG_USAGE_STREAM,
+ .label = "bla",
+ });
+ sg_destroy_buffer(b3);
+ const sg_buffer_desc b3_desc = sg_query_buffer_desc(b3);
+ T(b3_desc.size == 0);
+ T(b3_desc.type == 0);
+ T(b3_desc.usage == 0);
+
+ sg_shutdown();
+}
+
+UTEST(sokol_gfx, query_image_desc) {
+ setup(&(sg_desc){0});
+
+ sg_image i0 = sg_make_image(&(sg_image_desc){
+ .width = 256,
+ .height = 512,
+ .pixel_format = SG_PIXELFORMAT_R8,
+ .mag_filter = SG_FILTER_LINEAR,
+ .wrap_v = SG_WRAP_CLAMP_TO_EDGE,
+ .usage = SG_USAGE_DYNAMIC,
+ .border_color = SG_BORDERCOLOR_OPAQUE_WHITE,
+ .max_anisotropy = 4,
+ .min_lod = 0.5f,
+ .max_lod = 0.75f,
+ });
+ const sg_image_desc i0_desc = sg_query_image_desc(i0);
+ T(i0_desc.type == SG_IMAGETYPE_2D);
+ T(i0_desc.render_target == false);
+ T(i0_desc.width == 256);
+ T(i0_desc.height == 512);
+ T(i0_desc.num_slices == 1);
+ T(i0_desc.num_mipmaps == 1);
+ T(i0_desc.usage == SG_USAGE_DYNAMIC);
+ T(i0_desc.pixel_format == SG_PIXELFORMAT_R8);
+ T(i0_desc.sample_count == 1);
+ T(i0_desc.min_filter == SG_FILTER_NEAREST);
+ T(i0_desc.mag_filter == SG_FILTER_LINEAR);
+ T(i0_desc.wrap_u == SG_WRAP_REPEAT);
+ T(i0_desc.wrap_v == SG_WRAP_CLAMP_TO_EDGE);
+ T(i0_desc.wrap_w == SG_WRAP_REPEAT);
+ T(i0_desc.border_color == SG_BORDERCOLOR_OPAQUE_WHITE);
+ T(i0_desc.max_anisotropy == 4);
+ T(i0_desc.min_lod == 0.5f);
+ T(i0_desc.max_lod == 0.75f);
+ T(i0_desc.data.subimage[0][0].ptr == 0);
+ T(i0_desc.data.subimage[0][0].size == 0);
+ T(i0_desc.gl_textures[0] == 0);
+ T(i0_desc.gl_texture_target == 0);
+ T(i0_desc.mtl_textures[0] == 0);
+ T(i0_desc.d3d11_texture == 0);
+ T(i0_desc.d3d11_shader_resource_view == 0);
+ T(i0_desc.wgpu_texture == 0);
+
+ sg_destroy_image(i0);
+ const sg_image_desc i1_desc = sg_query_image_desc(i0);
+ T(i1_desc.type == 0);
+ T(i1_desc.render_target == false);
+ T(i1_desc.width == 0);
+ T(i1_desc.height == 0);
+ T(i1_desc.num_slices == 0);
+ T(i1_desc.num_mipmaps == 0);
+ T(i1_desc.usage == 0);
+ T(i1_desc.pixel_format == 0);
+ T(i1_desc.sample_count == 0);
+
sg_shutdown();
}