summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Weissflog <floooh@gmail.com>2019-07-24 18:57:36 +0200
committerAndre Weissflog <floooh@gmail.com>2019-07-24 18:57:36 +0200
commit85eedf1a9ee6866a54f311df6c8f76e0b4df442b (patch)
tree80f380c74ad15cfd08a0f912ffdab411e26d461f
parent199a6e5de084a56de01b37eb2958f6415ac3b12d (diff)
sokol_gfx.h: new pixelformat and caps code complete
-rw-r--r--sokol_gfx.h313
-rw-r--r--util/sokol_gfx_cimgui.h142
-rw-r--r--util/sokol_gfx_imgui.h142
3 files changed, 274 insertions, 323 deletions
diff --git a/sokol_gfx.h b/sokol_gfx.h
index 1ef2dec0..1b0ff84f 100644
--- a/sokol_gfx.h
+++ b/sokol_gfx.h
@@ -618,7 +618,7 @@ typedef enum sg_pixel_format {
SG_PIXELFORMAT_RGBA8SI,
SG_PIXELFORMAT_BGRA8,
SG_PIXELFORMAT_RGB10A2,
- SG_PIXELFORMAT_R11B10F,
+ SG_PIXELFORMAT_RG11B10F,
SG_PIXELFORMAT_RG32UI,
SG_PIXELFORMAT_RG32SI,
@@ -633,8 +633,8 @@ typedef enum sg_pixel_format {
SG_PIXELFORMAT_RGBA32SI,
SG_PIXELFORMAT_RGBA32F,
- SG_PIXELFORMAT_DEPTH24PLUS,
- SG_PIXELFORMAT_DEPTH24PLUS_STENCIL8,
+ SG_PIXELFORMAT_DEPTH,
+ SG_PIXELFORMAT_DEPTH_STENCIL,
SG_PIXELFORMAT_BC1_RGBA,
SG_PIXELFORMAT_BC2_RGBA,
@@ -669,26 +669,26 @@ typedef struct sg_pixelformat_caps {
bool blend:1; /* alpha-blending is supported */
bool render:1; /* pixel format can be used as render target */
bool msaa:1; /* pixel format can be used as MSAA render target */
- bool depth; /* pixel format is a depth format */
+ bool depth:1; /* pixel format is a depth format */
} sg_pixelformat_caps;
typedef struct sg_limits {
- int max_image_size_2d; /* max width/height of SG_IMAGETYPE_2D images */
- int max_image_size_cube; /* max width/height of SG_IMAGETYPE_CUBE images */
- int max_image_size_3d; /* max width/height/depth of SG_IMAGETYPE_3D images */
- int max_image_size_array;
- int max_image_array_layers;
+ uint16_t max_image_size_2d; /* max width/height of SG_IMAGETYPE_2D images */
+ uint16_t max_image_size_cube; /* max width/height of SG_IMAGETYPE_CUBE images */
+ uint16_t max_image_size_3d; /* max width/height/depth of SG_IMAGETYPE_3D images */
+ uint16_t max_image_size_array;
+ uint16_t max_image_array_layers;
} sg_limits;
typedef struct sg_caps {
sg_backend backend; /* the backend sokol_gfx.h was compiled for */
+ sg_limits limits;
bool instancing:1;
bool origin_top_left:1;
bool multiple_render_targets:1;
bool msaa_render_targets:1;
bool imagetype_3d:1; /* creation of SG_IMAGETYPE_3D images is supported */
bool imagetype_array:1; /* creation of SG_IMAGETYPE_ARRAY images is supported */
- sg_limits limits;
union {
struct {
sg_pixelformat_caps _default;
@@ -720,7 +720,7 @@ typedef struct sg_caps {
sg_pixelformat_caps rgba8si;
sg_pixelformat_caps bgra8;
sg_pixelformat_caps rgb10a2;
- sg_pixelformat_caps r11b10f;
+ sg_pixelformat_caps rg11b10f;
sg_pixelformat_caps rg32ui;
sg_pixelformat_caps rg32si;
sg_pixelformat_caps rg32f;
@@ -732,8 +732,8 @@ typedef struct sg_caps {
sg_pixelformat_caps rgba32ui;
sg_pixelformat_caps rgba32si;
sg_pixelformat_caps rgba32f;
- sg_pixelformat_caps depth24plus;
- sg_pixelformat_caps depth24plus_stencil8;
+ sg_pixelformat_caps depth;
+ sg_pixelformat_caps depth_stencil;
sg_pixelformat_caps bc1_rgba;
sg_pixelformat_caps bc2_rgba;
sg_pixelformat_caps bc3_rgba;
@@ -1750,7 +1750,6 @@ typedef struct sg_pass_desc {
*/
typedef struct sg_trace_hooks {
void* user_data;
- void (*query_caps)(const sg_caps* result, void* user_data);
void (*reset_state_cache)(void* user_data);
void (*make_buffer)(const sg_buffer_desc* desc, sg_buffer result, void* user_data);
void (*make_image)(const sg_image_desc* desc, sg_image result, void* user_data);
@@ -1953,6 +1952,7 @@ SOKOL_API_DECL void sg_setup(const sg_desc* desc);
SOKOL_API_DECL void sg_shutdown(void);
SOKOL_API_DECL bool sg_isvalid(void);
SOKOL_API_DECL sg_desc sg_query_desc(void);
+SOKOL_API_DECL sg_backend sg_query_backend(void);
SOKOL_API_DECL sg_caps sg_query_caps(void);
SOKOL_API_DECL void sg_reset_state_cache(void);
SOKOL_API_DECL sg_trace_hooks sg_install_trace_hooks(const sg_trace_hooks* trace_hooks);
@@ -3178,7 +3178,7 @@ _SOKOL_PRIVATE bool _sg_is_valid_rendertarget_depth_format(sg_pixel_format fmt)
/* return true if pixel format is a depth-stencil format */
_SOKOL_PRIVATE bool _sg_is_depth_stencil_format(sg_pixel_format fmt) {
- return (SG_PIXELFORMAT_DEPTH24PLUS_STENCIL8 == fmt);
+ return (SG_PIXELFORMAT_DEPTH_STENCIL == fmt);
}
/* return the bytes-per-pixel for a pixel format */
@@ -3215,7 +3215,7 @@ _SOKOL_PRIVATE int _sg_pixelformat_bytesize(sg_pixel_format fmt) {
case SG_PIXELFORMAT_RGBA8SI:
case SG_PIXELFORMAT_BGRA8:
case SG_PIXELFORMAT_RGB10A2:
- case SG_PIXELFORMAT_R11B10F:
+ case SG_PIXELFORMAT_RG11B10F:
return 4;
case SG_PIXELFORMAT_RG32UI:
@@ -3239,50 +3239,6 @@ _SOKOL_PRIVATE int _sg_pixelformat_bytesize(sg_pixel_format fmt) {
}
}
-/* capability table pixel format helper functions */
-_SOKOL_PRIVATE void _sg_caps_fmt_none(sg_pixelformat_caps* c) {
- c->valid = true;
-}
-
-_SOKOL_PRIVATE void _sg_caps_fmt_all(sg_pixelformat_caps* c) {
- c->valid = true;
- c->filter = true;
- c->blend = true;
- c->render = true;
- c->msaa = true;
-}
-
-_SOKOL_PRIVATE void _sg_caps_fmt_r(sg_pixelformat_caps* c) {
- c->valid = true;
- c->render = true;
-}
-
-_SOKOL_PRIVATE void _sg_caps_fmt_rmd(sg_pixelformat_caps* c) {
- c->valid = true;
- c->render = true;
- c->msaa = true;
- c->depth = true;
-}
-
-_SOKOL_PRIVATE void _sg_caps_fmt_rm(sg_pixelformat_caps* c) {
- c->valid = true;
- c->render = true;
- c->msaa = true;
-}
-
-_SOKOL_PRIVATE void _sg_caps_fmt_brm(sg_pixelformat_caps* c) {
- c->valid = true;
- c->blend = true;
- c->render = true;
- c->msaa = true;
-}
-
-_SOKOL_PRIVATE void _sg_caps_fmt_br(sg_pixelformat_caps* c) {
- c->valid = true;
- c->blend = true;
- c->render = true;
-}
-
/* return row pitch for an image
see ComputePitch in https://github.com/microsoft/DirectXTex/blob/master/DirectXTex/DirectXTexUtil.cpp
*/
@@ -3368,6 +3324,51 @@ _SOKOL_PRIVATE int _sg_surface_pitch(sg_pixel_format fmt, int width, int height)
return num_rows * _sg_row_pitch(fmt, width);
}
+/* capability table pixel format helper functions */
+_SOKOL_PRIVATE void _sg_caps_fmt_all(sg_pixelformat_caps* c) {
+ c->valid = true;
+ c->filter = true;
+ c->blend = true;
+ c->render = true;
+ c->msaa = true;
+}
+
+_SOKOL_PRIVATE void _sg_caps_fmt_f(sg_pixelformat_caps* c) {
+ c->valid = true;
+ c->filter = true;
+}
+
+_SOKOL_PRIVATE void _sg_caps_fmt_r(sg_pixelformat_caps* c) {
+ c->valid = true;
+ c->render = true;
+}
+
+_SOKOL_PRIVATE void _sg_caps_fmt_rmd(sg_pixelformat_caps* c) {
+ c->valid = true;
+ c->render = true;
+ c->msaa = true;
+ c->depth = true;
+}
+
+_SOKOL_PRIVATE void _sg_caps_fmt_rm(sg_pixelformat_caps* c) {
+ c->valid = true;
+ c->render = true;
+ c->msaa = true;
+}
+
+_SOKOL_PRIVATE void _sg_caps_fmt_brm(sg_pixelformat_caps* c) {
+ c->valid = true;
+ c->blend = true;
+ c->render = true;
+ c->msaa = true;
+}
+
+_SOKOL_PRIVATE void _sg_caps_fmt_br(sg_pixelformat_caps* c) {
+ c->valid = true;
+ c->blend = true;
+ c->render = true;
+}
+
/* resolve pass action defaults into a new pass action struct */
_SOKOL_PRIVATE void _sg_resolve_default_pass_action(const sg_pass_action* from, sg_pass_action* to) {
SOKOL_ASSERT(from && to);
@@ -7100,59 +7101,69 @@ _SOKOL_PRIVATE MTLPrimitiveType _sg_mtl_primitive_type(sg_primitive_type t) {
}
}
-_SOKOL_PRIVATE MTLPixelFormat _sg_mtl_texture_format(sg_pixel_format fmt) {
+_SOKOL_PRIVATE MTLPixelFormat _sg_mtl_pixel_format(sg_pixel_format fmt) {
switch (fmt) {
- case SG_PIXELFORMAT_RGBA8: return MTLPixelFormatRGBA8Unorm;
- case SG_PIXELFORMAT_R10G10B10A2: return MTLPixelFormatRGB10A2Unorm;
- case SG_PIXELFORMAT_RGBA32F: return MTLPixelFormatRGBA32Float;
- case SG_PIXELFORMAT_RGBA16F: return MTLPixelFormatRGBA16Float;
- case SG_PIXELFORMAT_R32F: return MTLPixelFormatR32Float;
- case SG_PIXELFORMAT_R16F: return MTLPixelFormatR16Float;
- case SG_PIXELFORMAT_L8: return MTLPixelFormatR8Unorm;
+ case SG_PIXELFORMAT_R8: return MTLPixelFormatR8Unorm;
+ case SG_PIXELFORMAT_R8SN: return MTLPixelFormatR8Snorm;
+ case SG_PIXELFORMAT_R8UI: return MTLPixelFormatR8Uint;
+ case SG_PIXELFORMAT_R8SI: return MTLPixelFormatR8Sint;
+ case SG_PIXELFORMAT_R16: return MTLPixelFormatR16Unorm;
+ case SG_PIXELFORMAT_R16SN: return MTLPixelFormatR16Snorm;
+ case SG_PIXELFORMAT_R16UI: return MTLPixelFormatR16Uint;
+ case SG_PIXELFORMAT_R16SI: return MTLPixelFormatR16Sint;
+ case SG_PIXELFORMAT_R16F: return MTLPixelFormatR16Float;
+ case SG_PIXELFORMAT_RG8: return MTLPixelFormatRG8Unorm;
+ case SG_PIXELFORMAT_RG8SN: return MTLPixelFormatRG8Snorm;
+ case SG_PIXELFORMAT_RG8UI: return MTLPixelFormatRG8Uint;
+ case SG_PIXELFORMAT_RG8SI: return MTLPixelFormatRG8Sint;
+ case SG_PIXELFORMAT_R32UI: return MTLPixelFormatR32Uint;
+ case SG_PIXELFORMAT_R32SI: return MTLPixelFormatR32Sint;
+ case SG_PIXELFORMAT_R32F: return MTLPixelFormatR32Float;
+ case SG_PIXELFORMAT_RG16: return MTLPixelFormatRG16Unorm;
+ case SG_PIXELFORMAT_RG16SN: return MTLPixelFormatRG16Snorm;
+ case SG_PIXELFORMAT_RG16UI: return MTLPixelFormatRG16Uint;
+ case SG_PIXELFORMAT_RG16SI: return MTLPixelFormatRG16Sint;
+ case SG_PIXELFORMAT_RG16F: return MTLPixelFormatRG16Float;
+ case SG_PIXELFORMAT_RGBA8: return MTLPixelFormatRGBA8Unorm;
+ case SG_PIXELFORMAT_RGBA8SN: return MTLPixelFormatRGBA8Snorm;
+ case SG_PIXELFORMAT_RGBA8UI: return MTLPixelFormatRGBA8Uint;
+ case SG_PIXELFORMAT_RGBA8SI: return MTLPixelFormatRGBA8Sint;
+ case SG_PIXELFORMAT_BGRA8: return MTLPixelFormatBGRA8Unorm;
+ case SG_PIXELFORMAT_RGB10A2: return MTLPixelFormatRGB10A2Unorm;
+ case SG_PIXELFORMAT_RG11B10F: return MTLPixelFormatRG11B10Float;
+ case SG_PIXELFORMAT_RG32UI: return MTLPixelFormatRG32Uint;
+ case SG_PIXELFORMAT_RG32SI: return MTLPixelFormatRG32Sint;
+ case SG_PIXELFORMAT_RG32F: return MTLPixelFormatRG32Float;
+ case SG_PIXELFORMAT_RGBA16: return MTLPixelFormatRGBA16Unorm;
+ case SG_PIXELFORMAT_RGBA16SN: return MTLPixelFormatRGBA16Snorm;
+ case SG_PIXELFORMAT_RGBA16UI: return MTLPixelFormatRGBA16Uint;
+ case SG_PIXELFORMAT_RGBA16SI: return MTLPixelFormatRGBA16Sint;
+ case SG_PIXELFORMAT_RGBA16F: return MTLPixelFormatRGBA16Float;
+ case SG_PIXELFORMAT_RGBA32UI: return MTLPixelFormatRGBA32Uint;
+ case SG_PIXELFORMAT_RGBA32SI: return MTLPixelFormatRGBA32Sint;
+ case SG_PIXELFORMAT_RGBA32F: return MTLPixelFormatRGBA32Float;
+ case SG_PIXELFORMAT_DEPTH: return MTLPixelFormatDepth32Float;
+ case SG_PIXELFORMAT_DEPTH_STENCIL: return MTLPixelFormatDepth32Float_Stencil8;
#if defined(_SG_TARGET_MACOS)
- case SG_PIXELFORMAT_DXT1: return MTLPixelFormatBC1_RGBA;
- case SG_PIXELFORMAT_DXT3: return MTLPixelFormatBC2_RGBA;
- case SG_PIXELFORMAT_DXT5: return MTLPixelFormatBC3_RGBA;
+ case SG_PIXELFORMAT_BC1_RGBA: return MTLPixelFormatBC1_RGBA;
+ case SG_PIXELFORMAT_BC2_RGBA: return MTLPixelFormatBC2_RGBA;
+ case SG_PIXELFORMAT_BC3_RGBA: return MTLPixelFormatBC3_RGBA;
+ case SG_PIXELFORMAT_BC4_R: return MTLPixelFormatBC4_RUnorm;
+ case SG_PIXELFORMAT_BC4_RSN: return MTLPixelFormatBC4_RSnorm;
+ case SG_PIXELFORMAT_BC5_RG: return MTLPixelFormatBC5_RGUnorm;
+ case SG_PIXELFORMAT_BC5_RGSN: return MTLPixelFormatBC5_RGSnorm;
+ case SG_PIXELFORMAT_BC6H_RGBF: return MTLPixelFormatBC6H_RGBFloat;
+ case SG_PIXELFORMAT_BC6H_RGBUF: return MTLPixelFormatBC6H_RGBUfloat;
+ case SG_PIXELFORMAT_BC7_RGBA: return MTLPixelFormatBC7_RGBAUnorm;
#else
- case SG_PIXELFORMAT_PVRTC2_RGB: return MTLPixelFormatPVRTC_RGB_2BPP;
- case SG_PIXELFORMAT_PVRTC4_RGB: return MTLPixelFormatPVRTC_RGB_4BPP;
- case SG_PIXELFORMAT_PVRTC2_RGBA: return MTLPixelFormatPVRTC_RGBA_2BPP;
- case SG_PIXELFORMAT_PVRTC4_RGBA: return MTLPixelFormatPVRTC_RGBA_4BPP;
- case SG_PIXELFORMAT_ETC2_RGB8: return MTLPixelFormatETC2_RGB8;
- case SG_PIXELFORMAT_ETC2_SRGB8: return MTLPixelFormatETC2_RGB8_sRGB;
+ case SG_PIXELFORMAT_PVRTC_RGB_2BPP: return MTLPixelFormatPVRTC_RGB_2BPP;
+ case SG_PIXELFORMAT_PVRTC_RGB_4BPP: return MTLPixelFormatPVRTC_RGB_4BPP;
+ case SG_PIXELFORMAT_PVRTC_RGBA_2BPP: return MTLPixelFormatPVRTC_RGBA_2BPP;
+ case SG_PIXELFORMAT_PVRTC_RGBA_4BPP: return MTLPixelFormatPVRTC_RGBA_4BPP;
+ case SG_PIXELFORMAT_ETC2_RGB8: return MTLPixelFormatETC2_RGB8;
+ case SG_PIXELFORMAT_ETC2_RGB8A1: return MTLPixelFormatETC2_RGB8A1;
#endif
- default: return MTLPixelFormatInvalid;
- }
-}
-
-_SOKOL_PRIVATE MTLPixelFormat _sg_mtl_rendertarget_color_format(sg_pixel_format fmt) {
- switch (fmt) {
- case SG_PIXELFORMAT_RGBA8: return MTLPixelFormatBGRA8Unorm; /* not a bug */
- case SG_PIXELFORMAT_RGBA32F: return MTLPixelFormatRGBA32Float;
- case SG_PIXELFORMAT_RGBA16F: return MTLPixelFormatRGBA16Float;
- case SG_PIXELFORMAT_R10G10B10A2: return MTLPixelFormatRGB10A2Unorm;
- default: return MTLPixelFormatInvalid;
- }
-}
-
-_SOKOL_PRIVATE MTLPixelFormat _sg_mtl_rendertarget_depth_format(sg_pixel_format fmt) {
- switch (fmt) {
- case SG_PIXELFORMAT_DEPTH:
- return MTLPixelFormatDepth32Float;
- case SG_PIXELFORMAT_DEPTHSTENCIL:
- /* NOTE: Depth24_Stencil8 isn't universally supported! */
- return MTLPixelFormatDepth32Float_Stencil8;
- default:
- return MTLPixelFormatInvalid;
- }
-}
-
-_SOKOL_PRIVATE MTLPixelFormat _sg_mtl_rendertarget_stencil_format(sg_pixel_format fmt) {
- switch (fmt) {
- case SG_PIXELFORMAT_DEPTHSTENCIL:
- return MTLPixelFormatDepth32Float_Stencil8;
- default:
- return MTLPixelFormatInvalid;
+ default: return MTLPixelFormatInvalid;
}
}
@@ -7277,10 +7288,10 @@ _SOKOL_PRIVATE MTLTextureType _sg_mtl_texture_type(sg_image_type t) {
_SOKOL_PRIVATE bool _sg_mtl_is_pvrtc(sg_pixel_format fmt) {
switch (fmt) {
- case SG_PIXELFORMAT_PVRTC2_RGB:
- case SG_PIXELFORMAT_PVRTC2_RGBA:
- case SG_PIXELFORMAT_PVRTC4_RGB:
- case SG_PIXELFORMAT_PVRTC4_RGBA:
+ case SG_PIXELFORMAT_PVRTC_RGB_2BPP:
+ case SG_PIXELFORMAT_PVRTC_RGB_4BPP:
+ case SG_PIXELFORMAT_PVRTC_RGBA_2BPP:
+ case SG_PIXELFORMAT_PVRTC_RGBA_4BPP:
return true;
default:
return false;
@@ -7551,7 +7562,7 @@ _SOKOL_PRIVATE void _sg_mtl_init_caps(void) {
caps->multiple_render_targets = true;
caps->msaa_render_targets = true;
caps->imagetype_3d = true;
- caps->imagetype_3d = true;
+ caps->imagetype_array = true;
#if defined(_SG_TARGET_MACOS)
caps->limits.max_image_size_2d = 16 * 1024;
@@ -7595,7 +7606,7 @@ _SOKOL_PRIVATE void _sg_mtl_init_caps(void) {
_sg_caps_fmt_rm(&caps->format.rgba8si);
_sg_caps_fmt_all(&caps->format.bgra8);
_sg_caps_fmt_all(&caps->format.rgb10a2);
- _sg_caps_fmt_all(&caps->format.r11b10f);
+ _sg_caps_fmt_all(&caps->format.rg11b10f);
#if defined(_SG_TARGET_MACOS)
_sg_caps_fmt_rm(&caps->format.rg32ui);
#else
@@ -7621,8 +7632,8 @@ _SOKOL_PRIVATE void _sg_mtl_init_caps(void) {
_sg_caps_fmt_r(&caps->format.rgba32si);
_sg_caps_fmt_r(&caps->format.rgba32f);
#endif
- _sg_caps_fmt_rmd(&caps->format.depth24plus);
- _sg_caps_fmt_rmd(&caps->format.depth24plus_stencil8);
+ _sg_caps_fmt_rmd(&caps->format.depth);
+ _sg_caps_fmt_rmd(&caps->format.depth_stencil);
#if defined(_SG_TARGET_MACOS)
_sg_caps_fmt_f(&caps->format.bc1_rgba);
_sg_caps_fmt_f(&caps->format.bc2_rgba);
@@ -7634,29 +7645,13 @@ _SOKOL_PRIVATE void _sg_mtl_init_caps(void) {
_sg_caps_fmt_f(&caps->format.bc6h_rgbf);
_sg_caps_fmt_f(&caps->format.bc6h_rgbuf);
_sg_caps_fmt_f(&caps->format.bc7_rgba);
- _sg_caps_fmt_none(&caps->format.pvrtc_rgb_2bpp);
- _sg_caps_fmt_none(&caps->format.pvrtc_rgb_4bpp);
- _sg_caps_fmt_none(&caps->format.pvrtc_rgba_2bpp);
- _sg_caps_fmt_none(&caps->format.pvrtc_rgba_4bpp);
- _sg_caps_fmt_none(&caps->format.etc2_rgb8);
- _sg_caps_fmt_none(&caps->format.etc2_rgb8a1);
#else
- _sg_caps_fmt_none(&caps->format.bc1_rgba);
- _sg_caps_fmt_none(&caps->format.bc2_rgba);
- _sg_caps_fmt_none(&caps->format.bc3_rgba);
- _sg_caps_fmt_none(&caps->format.bc4_r);
- _sg_caps_fmt_none(&caps->format.bc4_rsn);
- _sg_caps_fmt_none(&caps->format.bc5_rg);
- _sg_caps_fmt_none(&caps->format.bc5_rgsn);
- _sg_caps_fmt_none(&caps->format.bc6h_rgbf);
- _sg_caps_fmt_none(&caps->format.bc6h_rgbuf);
- _sg_caps_fmt_none(&caps->format.bc7_rgba);
- _sg_caps_fmt_filter(&caps->format.pvrtc_rgb_2bpp);
- _sg_caps_fmt_filter(&caps->format.pvrtc_rgb_4bpp);
- _sg_caps_fmt_filter(&caps->format.pvrtc_rgba_2bpp);
- _sg_caps_fmt_filter(&caps->format.pvrtc_rgba_4bpp);
- _sg_caps_fmt_filter(&caps->format.etc2_rgb8);
- _sg_caps_fmt_filter(&caps->format.etc2_rgb8a1);
+ _sg_caps_fmt_f(&caps->format.pvrtc_rgb_2bpp);
+ _sg_caps_fmt_f(&caps->format.pvrtc_rgb_4bpp);
+ _sg_caps_fmt_f(&caps->format.pvrtc_rgba_2bpp);
+ _sg_caps_fmt_f(&caps->format.pvrtc_rgba_4bpp);
+ _sg_caps_fmt_f(&caps->format.etc2_rgb8);
+ _sg_caps_fmt_f(&caps->format.etc2_rgb8a1);
#endif
}
@@ -7831,17 +7826,7 @@ _SOKOL_PRIVATE void _sg_mtl_copy_image_content(const _sg_image_t* img, __unsafe_
/* initialize MTLTextureDescritor with common attributes */
_SOKOL_PRIVATE bool _sg_mtl_init_texdesc_common(MTLTextureDescriptor* mtl_desc, _sg_image_t* img) {
mtl_desc.textureType = _sg_mtl_texture_type(img->type);
- if (img->render_target) {
- if (_sg_is_valid_rendertarget_color_format(img->pixel_format)) {
- mtl_desc.pixelFormat = _sg_mtl_rendertarget_color_format(img->pixel_format);
- }
- else {
- mtl_desc.pixelFormat = _sg_mtl_rendertarget_depth_format(img->pixel_format);
- }
- }
- else {
- mtl_desc.pixelFormat = _sg_mtl_texture_format(img->pixel_format);
- }
+ mtl_desc.pixelFormat = _sg_mtl_pixel_format(img->pixel_format);
if (MTLPixelFormatInvalid == mtl_desc.pixelFormat) {
SOKOL_LOG("Unsupported texture pixel format!\n");
return false;
@@ -8179,8 +8164,10 @@ _SOKOL_PRIVATE sg_resource_state _sg_create_pipeline(_sg_pipeline_t* pip, _sg_sh
rp_desc.alphaToCoverageEnabled = desc->rasterizer.alpha_to_coverage_enabled;
rp_desc.alphaToOneEnabled = NO;
rp_desc.rasterizationEnabled = YES;
- rp_desc.depthAttachmentPixelFormat = _sg_mtl_rendertarget_depth_format(desc->blend.depth_format);
- rp_desc.stencilAttachmentPixelFormat = _sg_mtl_rendertarget_stencil_format(desc->blend.depth_format);
+ rp_desc.depthAttachmentPixelFormat = _sg_mtl_pixel_format(desc->blend.depth_format);
+ if (desc->blend.depth_format == SG_PIXELFORMAT_DEPTH_STENCIL) {
+ rp_desc.stencilAttachmentPixelFormat = _sg_mtl_pixel_format(desc->blend.depth_format);
+ }
/* FIXME: this only works on macOS 10.13!
for (int i = 0; i < (SG_MAX_SHADERSTAGE_UBS+SG_MAX_SHADERSTAGE_BUFFERS); i++) {
rp_desc.vertexBuffers[i].mutability = MTLMutabilityImmutable;
@@ -8191,7 +8178,7 @@ _SOKOL_PRIVATE sg_resource_state _sg_create_pipeline(_sg_pipeline_t* pip, _sg_sh
*/
const int att_count = desc->blend.color_attachment_count;
for (int i = 0; i < att_count; i++) {
- rp_desc.colorAttachments[i].pixelFormat = _sg_mtl_rendertarget_color_format(desc->blend.color_format);
+ rp_desc.colorAttachments[i].pixelFormat = _sg_mtl_pixel_format(desc->blend.color_format);
rp_desc.colorAttachments[i].writeMask = _sg_mtl_color_write_mask((sg_color_mask)desc->blend.color_write_mask);
rp_desc.colorAttachments[i].blendingEnabled = desc->blend.enabled;
rp_desc.colorAttachments[i].alphaBlendOperation = _sg_mtl_blend_op(desc->blend.op_alpha);
@@ -9538,8 +9525,8 @@ _SOKOL_PRIVATE bool _sg_validate_apply_pipeline(sg_pipeline pip_id) {
else {
/* default pass */
SOKOL_VALIDATE(pip->color_attachment_count == 1, _SG_VALIDATE_APIP_ATT_COUNT);
- SOKOL_VALIDATE(pip->color_format == SG_PIXELFORMAT_RGBA8, _SG_VALIDATE_APIP_COLOR_FORMAT);
- SOKOL_VALIDATE(pip->depth_format == SG_PIXELFORMAT_DEPTHSTENCIL, _SG_VALIDATE_APIP_DEPTH_FORMAT);
+ SOKOL_VALIDATE(pip->color_format == SG_PIXELFORMAT_BGRA8, _SG_VALIDATE_APIP_COLOR_FORMAT);
+ SOKOL_VALIDATE(pip->depth_format == SG_PIXELFORMAT_DEPTH_STENCIL, _SG_VALIDATE_APIP_DEPTH_FORMAT);
/* FIXME: hmm, we don't know if the default framebuffer is multisampled here */
}
return SOKOL_VALIDATE_END();
@@ -9736,7 +9723,12 @@ _SOKOL_PRIVATE sg_image_desc _sg_image_desc_defaults(const sg_image_desc* desc)
def.depth = _sg_def(def.depth, 1);
def.num_mipmaps = _sg_def(def.num_mipmaps, 1);
def.usage = _sg_def(def.usage, SG_USAGE_IMMUTABLE);
- def.pixel_format = _sg_def(def.pixel_format, SG_PIXELFORMAT_RGBA8);
+ if (desc->render_target) {
+ def.pixel_format = _sg_def(def.pixel_format, SG_PIXELFORMAT_BGRA8);
+ }
+ else {
+ def.pixel_format = _sg_def(def.pixel_format, SG_PIXELFORMAT_RGBA8);
+ }
def.sample_count = _sg_def(def.sample_count, 1);
def.min_filter = _sg_def(def.min_filter, SG_FILTER_NEAREST);
def.mag_filter = _sg_def(def.mag_filter, SG_FILTER_NEAREST);
@@ -9805,8 +9797,8 @@ _SOKOL_PRIVATE sg_pipeline_desc _sg_pipeline_desc_defaults(const sg_pipeline_des
def.blend.color_write_mask = (uint8_t) _sg_def((sg_color_mask)def.blend.color_write_mask, SG_COLORMASK_RGBA);
}
def.blend.color_attachment_count = _sg_def(def.blend.color_attachment_count, 1);
- def.blend.color_format = _sg_def(def.blend.color_format, SG_PIXELFORMAT_RGBA8);
- def.blend.depth_format = _sg_def(def.blend.depth_format, SG_PIXELFORMAT_DEPTHSTENCIL);
+ def.blend.color_format = _sg_def(def.blend.color_format, SG_PIXELFORMAT_BGRA8);
+ def.blend.depth_format = _sg_def(def.blend.depth_format, SG_PIXELFORMAT_DEPTH_STENCIL);
def.rasterizer.cull_mode = _sg_def(def.rasterizer.cull_mode, SG_CULLMODE_NONE);
def.rasterizer.face_winding = _sg_def(def.rasterizer.face_winding, SG_FACEWINDING_CW);
@@ -10067,8 +10059,11 @@ SOKOL_API_IMPL sg_desc sg_query_desc(void) {
return _sg.desc;
}
+SOKOL_API_IMPL sg_backend sg_query_backend(void) {
+ return _sg.caps.backend;
+}
+
SOKOL_API_IMPL sg_caps sg_query_caps(void) {
- _SG_TRACE_ARGS(query_caps, &_sg.caps);
return _sg.caps;
}
diff --git a/util/sokol_gfx_cimgui.h b/util/sokol_gfx_cimgui.h
index b73be352..ff5c96e8 100644
--- a/util/sokol_gfx_cimgui.h
+++ b/util/sokol_gfx_cimgui.h
@@ -255,7 +255,6 @@ typedef struct {
typedef enum {
sg_cimgui_CMD_INVALID,
- sg_cimgui_CMD_QUERY_FEATURE,
sg_cimgui_CMD_RESET_STATE_CACHE,
sg_cimgui_CMD_MAKE_BUFFER,
sg_cimgui_CMD_MAKE_IMAGE,
@@ -309,11 +308,6 @@ typedef enum {
} sg_cimgui_cmd_t;
typedef struct {
- sg_feature feature;
- bool result;
-} sg_cimgui_args_query_feature_t;
-
-typedef struct {
sg_buffer result;
} sg_cimgui_args_make_buffer_t;
@@ -477,7 +471,6 @@ typedef struct {
} sg_cimgui_args_push_debug_group_t;
typedef union {
- sg_cimgui_args_query_feature_t query_feature;
sg_cimgui_args_make_buffer_t make_buffer;
sg_cimgui_args_make_image_t make_image;
sg_cimgui_args_make_shader_t make_shader;
@@ -710,26 +703,6 @@ _SOKOL_PRIVATE void _sg_cimgui_snprintf(sg_cimgui_str_t* dst, const char* fmt, .
}
/*--- STRING CONVERSION ------------------------------------------------------*/
-_SOKOL_PRIVATE const char* _sg_cimgui_feature_string(sg_feature f) {
- switch (f) {
- case SG_FEATURE_INSTANCING: return "SG_FEATURE_INSTANCING";
- case SG_FEATURE_TEXTURE_COMPRESSION_DXT: return "SG_FEATURE_TEXTURE_COMPRESSION_DXT";
- case SG_FEATURE_TEXTURE_COMPRESSION_PVRTC: return "SG_FEATURE_TEXTURE_COMPRESSION_PVRTC";
- case SG_FEATURE_TEXTURE_COMPRESSION_ATC: return "SG_FEATURE_TEXTURE_COMPRESSION_ATC";
- case SG_FEATURE_TEXTURE_COMPRESSION_ETC2: return "SG_FEATURE_TEXTURE_COMPRESSION_ETC2";
- case SG_FEATURE_TEXTURE_FLOAT: return "SG_FEATURE_TEXTURE_FLOAT";
- case SG_FEATURE_TEXTURE_HALF_FLOAT: return "SG_FEATURE_TEXTURE_HALF_FLOAT";
- case SG_FEATURE_ORIGIN_BOTTOM_LEFT: return "SG_FEATURE_ORIGIN_BOTTOM_LEFT";
- case SG_FEATURE_ORIGIN_TOP_LEFT: return "SG_FEATURE_ORIGIN_TOP_LEFT";
- case SG_FEATURE_MSAA_RENDER_TARGETS: return "SG_FEATURE_MSAA_RENDER_TARGETS";
- case SG_FEATURE_PACKED_VERTEX_FORMAT_10_2: return "SG_FEATURE_PACKED_VERTEX_FORMAT_10_2";
- case SG_FEATURE_MULTIPLE_RENDER_TARGET: return "SG_FEATURE_MULTIPLE_RENDER_TARGET";
- case SG_FEATURE_IMAGETYPE_3D: return "SG_FEATURE_IMAGETYPE_3D";
- case SG_FEATURE_IMAGETYPE_ARRAY: return "SG_FEATURE_IMAGETYPE_ARRAY";
- default: return "???";
- }
-}
-
_SOKOL_PRIVATE const char* _sg_cimgui_resourcestate_string(sg_resource_state s) {
switch (s) {
case SG_RESOURCESTATE_INITIAL: return "SG_RESOURCESTATE_INITIAL";
@@ -775,30 +748,65 @@ _SOKOL_PRIVATE const char* _sg_cimgui_imagetype_string(sg_image_type t) {
_SOKOL_PRIVATE const char* _sg_cimgui_pixelformat_string(sg_pixel_format fmt) {
switch (fmt) {
- case SG_PIXELFORMAT_NONE: return "SG_PIXELFORMAT_NONE";
- case SG_PIXELFORMAT_RGBA8: return "SG_PIXELFORMAT_RGBA8";
- case SG_PIXELFORMAT_RGB8: return "SG_PIXELFORMAT_RGB8";
- case SG_PIXELFORMAT_RGBA4: return "SG_PIXELFORMAT_RGBA4";
- case SG_PIXELFORMAT_R5G6B5: return "SG_PIXELFORMAT_R5G6B5";
- case SG_PIXELFORMAT_R5G5B5A1: return "SG_PIXELFORMAT_R5G5B5A1";
- case SG_PIXELFORMAT_R10G10B10A2: return "SG_PIXELFORMAT_R10G10B10A2";
- case SG_PIXELFORMAT_RGBA32F: return "SG_PIXELFORMAT_RGBA32F";
- case SG_PIXELFORMAT_RGBA16F: return "SG_PIXELFORMAT_RGBA16F";
- case SG_PIXELFORMAT_R32F: return "SG_PIXELFORMAT_R32F";
- case SG_PIXELFORMAT_R16F: return "SG_PIXELFORMAT_R16F";
- case SG_PIXELFORMAT_L8: return "SG_PIXELFORMAT_L8";
- case SG_PIXELFORMAT_DXT1: return "SG_PIXELFORMAT_DXT1";
- case SG_PIXELFORMAT_DXT3: return "SG_PIXELFORMAT_DXT3";
- case SG_PIXELFORMAT_DXT5: return "SG_PIXELFORMAT_DXT5";
- case SG_PIXELFORMAT_DEPTH: return "SG_PIXELFORMAT_DEPTH";
- case SG_PIXELFORMAT_DEPTHSTENCIL: return "SG_PIXELFORMAT_DEPTHSTENCIL";
- case SG_PIXELFORMAT_PVRTC2_RGB: return "SG_PIXELFORMAT_PVRTC2_RGB";
- case SG_PIXELFORMAT_PVRTC4_RGB: return "SG_PIXELFORMAT_PVRTC4_RGB";
- case SG_PIXELFORMAT_PVRTC2_RGBA: return "SG_PIXELFORMAT_PVRTC2_RGBA";
- case SG_PIXELFORMAT_PVRTC4_RGBA: return "SG_PIXELFORMAT_PVRTC4_RGBA";
- case SG_PIXELFORMAT_ETC2_RGB8: return "SG_PIXELFORMAT_ETC2_RGB8";
- case SG_PIXELFORMAT_ETC2_SRGB8: return "SG_PIXELFORMAT_ETC2_SRGB8";
- default: return "???";
+ case SG_PIXELFORMAT_NONE: return "SG_PIXELFORMAT_NONE";
+ case SG_PIXELFORMAT_R8: return "SG_PIXELFORMAT_R8";
+ case SG_PIXELFORMAT_R8SN: return "SG_PIXELFORMAT_R8SN";
+ case SG_PIXELFORMAT_R8UI: return "SG_PIXELFORMAT_R8UI";
+ case SG_PIXELFORMAT_R8SI: return "SG_PIXELFORMAT_R8SI";
+ case SG_PIXELFORMAT_R16: return "SG_PIXELFORMAT_R16";
+ case SG_PIXELFORMAT_R16SN: return "SG_PIXELFORMAT_R16SN";
+ case SG_PIXELFORMAT_R16UI: return "SG_PIXELFORMAT_R16UI";
+ case SG_PIXELFORMAT_R16SI: return "SG_PIXELFORMAT_R16SI";
+ case SG_PIXELFORMAT_R16F: return "SG_PIXELFORMAT_R16F";
+ case SG_PIXELFORMAT_RG8: return "SG_PIXELFORMAT_RG8";
+ case SG_PIXELFORMAT_RG8SN: return "SG_PIXELFORMAT_RG8SN";
+ case SG_PIXELFORMAT_RG8UI: return "SG_PIXELFORMAT_RG8UI";
+ case SG_PIXELFORMAT_RG8SI: return "SG_PIXELFORMAT_RG8SI";
+ case SG_PIXELFORMAT_R32UI: return "SG_PIXELFORMAT_R32UI";
+ case SG_PIXELFORMAT_R32SI: return "SG_PIXELFORMAT_R32SI";
+ case SG_PIXELFORMAT_R32F: return "SG_PIXELFORMAT_R32F";
+ case SG_PIXELFORMAT_RG16: return "SG_PIXELFORMAT_RG16";
+ case SG_PIXELFORMAT_RG16SN: return "SG_PIXELFORMAT_RG16SN";
+ case SG_PIXELFORMAT_RG16UI: return "SG_PIXELFORMAT_RG16UI";
+ case SG_PIXELFORMAT_RG16SI: return "SG_PIXELFORMAT_RG16SI";
+ case SG_PIXELFORMAT_RG16F: return "SG_PIXELFORMAT_RG16F";
+ case SG_PIXELFORMAT_RGBA8: return "SG_PIXELFORMAT_RGBA8";
+ case SG_PIXELFORMAT_RGBA8SN: return "SG_PIXELFORMAT_RGBA8SN";
+ case SG_PIXELFORMAT_RGBA8UI: return "SG_PIXELFORMAT_RGBA8UI";
+ case SG_PIXELFORMAT_RGBA8SI: return "SG_PIXELFORMAT_RGBA8SI";
+ case SG_PIXELFORMAT_BGRA8: return "SG_PIXELFORMAT_BGRA8";
+ case SG_PIXELFORMAT_RGB10A2: return "SG_PIXELFORMAT_RGB10A2";
+ case SG_PIXELFORMAT_RG11B10F: return "SG_PIXELFORMAT_RG11B10F";
+ case SG_PIXELFORMAT_RG32UI: return "SG_PIXELFORMAT_RG32UI";
+ case SG_PIXELFORMAT_RG32SI: return "SG_PIXELFORMAT_RG32SI";
+ case SG_PIXELFORMAT_RG32F: return "SG_PIXELFORMAT_RG32F";
+ case SG_PIXELFORMAT_RGBA16: return "SG_PIXELFORMAT_RGBA16";
+ case SG_PIXELFORMAT_RGBA16SN: return "SG_PIXELFORMAT_RGBA16SN";
+ case SG_PIXELFORMAT_RGBA16UI: return "SG_PIXELFORMAT_RGBA16UI";
+ case SG_PIXELFORMAT_RGBA16SI: return "SG_PIXELFORMAT_RGBA16SI";
+ case SG_PIXELFORMAT_RGBA16F: return "SG_PIXELFORMAT_RGBA16F";
+ case SG_PIXELFORMAT_RGBA32UI: return "SG_PIXELFORMAT_RGBA32UI";
+ case SG_PIXELFORMAT_RGBA32SI: return "SG_PIXELFORMAT_RGBA32SI";
+ case SG_PIXELFORMAT_RGBA32F: return "SG_PIXELFORMAT_RGBA32F";
+ case SG_PIXELFORMAT_DEPTH: return "SG_PIXELFORMAT_DEPTH";
+ case SG_PIXELFORMAT_DEPTH_STENCIL: return "SG_PIXELFORMAT_DEPTH_STENCIL";
+ case SG_PIXELFORMAT_BC1_RGBA: return "SG_PIXELFORMAT_BC1_RGBA";
+ case SG_PIXELFORMAT_BC2_RGBA: return "SG_PIXELFORMAT_BC2_RGBA";
+ case SG_PIXELFORMAT_BC3_RGBA: return "SG_PIXELFORMAT_BC3_RGBA";
+ case SG_PIXELFORMAT_BC4_R: return "SG_PIXELFORMAT_BC4_R";
+ case SG_PIXELFORMAT_BC4_RSN: return "SG_PIXELFORMAT_BC4_RSN";
+ case SG_PIXELFORMAT_BC5_RG: return "SG_PIXELFORMAT_BC5_RG";
+ case SG_PIXELFORMAT_BC5_RGSN: return "SG_PIXELFORMAT_BC5_RGSN";
+ case SG_PIXELFORMAT_BC6H_RGBF: return "SG_PIXELFORMAT_BC6H_RGBF";
+ case SG_PIXELFORMAT_BC6H_RGBUF: return "SG_PIXELFORMAT_BC6H_RGBUF";
+ case SG_PIXELFORMAT_BC7_RGBA: return "SG_PIXELFORMAT_BC7_RGBA";
+ case SG_PIXELFORMAT_PVRTC_RGB_2BPP: return "SG_PIXELFORMAT_PVRTC_RGB_2BPP";
+ case SG_PIXELFORMAT_PVRTC_RGB_4BPP: return "SG_PIXELFORMAT_PVRTC_RGB_4BPP";
+ case SG_PIXELFORMAT_PVRTC_RGBA_2BPP: return "SG_PIXELFORMAT_PVRTC_RGBA_2BPP";
+ case SG_PIXELFORMAT_PVRTC_RGBA_4BPP: return "SG_PIXELFORMAT_PVRTC_RGBA_4BPP";
+ case SG_PIXELFORMAT_ETC2_RGB8: return "SG_PIXELFORMAT_ETC2_RGB8";
+ case SG_PIXELFORMAT_ETC2_RGB8A1: return "SG_PIXELFORMAT_ETC2_RGB8A1";
+ default: return "???";
}
}
@@ -1290,13 +1298,6 @@ _SOKOL_PRIVATE sg_cimgui_str_t _sg_cimgui_capture_item_string(sg_cimgui_t* ctx,
sg_cimgui_str_t str = _sg_cimgui_make_str(0);
sg_cimgui_str_t res_id = _sg_cimgui_make_str(0);
switch (item->cmd) {
- case sg_cimgui_CMD_QUERY_FEATURE:
- _sg_cimgui_snprintf(&str, "%d: sg_query_feature(feature=%s) => %s",
- index,
- _sg_cimgui_feature_string(item->args.query_feature.feature),
- _sg_cimgui_bool_string(item->args.query_feature.result));
- break;
-
case sg_cimgui_CMD_RESET_STATE_CACHE:
_sg_cimgui_snprintf(&str, "%d: sg_reset_state_cache()", index);
break;
@@ -1564,21 +1565,6 @@ _SOKOL_PRIVATE sg_cimgui_str_t _sg_cimgui_capture_item_string(sg_cimgui_t* ctx,
}
/*--- CAPTURE CALLBACKS ------------------------------------------------------*/
-_SOKOL_PRIVATE void _sg_cimgui_query_feature(sg_feature feature, bool result, void* user_data) {
- sg_cimgui_t* ctx = (sg_cimgui_t*) user_data;
- SOKOL_ASSERT(ctx);
- sg_cimgui_capture_item_t* item = _sg_cimgui_capture_next_write_item(ctx);
- if (item) {
- item->cmd = sg_cimgui_CMD_QUERY_FEATURE;
- item->color = _sg_cimgui_COLOR_OTHER;
- item->args.query_feature.feature = feature;
- item->args.query_feature.result = result;
- }
- if (ctx->hooks.query_feature) {
- ctx->hooks.query_feature(feature, result, ctx->hooks.user_data);
- }
-}
-
_SOKOL_PRIVATE void _sg_cimgui_reset_state_cache(void* user_data) {
sg_cimgui_t* ctx = (sg_cimgui_t*) user_data;
SOKOL_ASSERT(ctx);
@@ -2560,12 +2546,7 @@ _SOKOL_PRIVATE void _sg_cimgui_draw_buffer_panel(sg_cimgui_t* ctx, sg_buffer buf
}
_SOKOL_PRIVATE bool _sg_cimgui_image_renderable(sg_cimgui_t* ctx, sg_image_type type, sg_pixel_format fmt) {
- if ((SG_IMAGETYPE_2D != type) || (SG_PIXELFORMAT_DEPTH == fmt) || (SG_PIXELFORMAT_DEPTHSTENCIL == fmt)) {
- return false;
- }
- else {
- return true;
- }
+ return sg_query_caps().formats[fmt].valid && !sg_query_caps().formats[fmt].depth;
}
_SOKOL_PRIVATE void _sg_cimgui_draw_embedded_image(sg_cimgui_t* ctx, sg_image img, float* scale) {
@@ -3091,8 +3072,6 @@ _SOKOL_PRIVATE void _sg_cimgui_draw_capture_panel(sg_cimgui_t* ctx) {
igPopStyleColor(1);
igSeparator();
switch (item->cmd) {
- case sg_cimgui_CMD_QUERY_FEATURE:
- break;
case sg_cimgui_CMD_RESET_STATE_CACHE:
break;
case sg_cimgui_CMD_MAKE_BUFFER:
@@ -3223,7 +3202,6 @@ SOKOL_API_IMPL void sg_cimgui_init(sg_cimgui_t* ctx) {
sg_trace_hooks hooks;
memset(&hooks, 0, sizeof(hooks));
hooks.user_data = (void*) ctx;
- hooks.query_feature = _sg_cimgui_query_feature;
hooks.reset_state_cache = _sg_cimgui_reset_state_cache;
hooks.make_buffer = _sg_cimgui_make_buffer;
hooks.make_image = _sg_cimgui_make_image;
diff --git a/util/sokol_gfx_imgui.h b/util/sokol_gfx_imgui.h
index 96b38b26..81389a6e 100644
--- a/util/sokol_gfx_imgui.h
+++ b/util/sokol_gfx_imgui.h
@@ -257,7 +257,6 @@ typedef struct {
typedef enum {
SG_IMGUI_CMD_INVALID,
- SG_IMGUI_CMD_QUERY_FEATURE,
SG_IMGUI_CMD_RESET_STATE_CACHE,
SG_IMGUI_CMD_MAKE_BUFFER,
SG_IMGUI_CMD_MAKE_IMAGE,
@@ -311,11 +310,6 @@ typedef enum {
} sg_imgui_cmd_t;
typedef struct {
- sg_feature feature;
- bool result;
-} sg_imgui_args_query_feature_t;
-
-typedef struct {
sg_buffer result;
} sg_imgui_args_make_buffer_t;
@@ -479,7 +473,6 @@ typedef struct {
} sg_imgui_args_push_debug_group_t;
typedef union {
- sg_imgui_args_query_feature_t query_feature;
sg_imgui_args_make_buffer_t make_buffer;
sg_imgui_args_make_image_t make_image;
sg_imgui_args_make_shader_t make_shader;
@@ -706,26 +699,6 @@ _SOKOL_PRIVATE void _sg_imgui_snprintf(sg_imgui_str_t* dst, const char* fmt, ...
}
/*--- STRING CONVERSION ------------------------------------------------------*/
-_SOKOL_PRIVATE const char* _sg_imgui_feature_string(sg_feature f) {
- switch (f) {
- case SG_FEATURE_INSTANCING: return "SG_FEATURE_INSTANCING";
- case SG_FEATURE_TEXTURE_COMPRESSION_DXT: return "SG_FEATURE_TEXTURE_COMPRESSION_DXT";
- case SG_FEATURE_TEXTURE_COMPRESSION_PVRTC: return "SG_FEATURE_TEXTURE_COMPRESSION_PVRTC";
- case SG_FEATURE_TEXTURE_COMPRESSION_ATC: return "SG_FEATURE_TEXTURE_COMPRESSION_ATC";
- case SG_FEATURE_TEXTURE_COMPRESSION_ETC2: return "SG_FEATURE_TEXTURE_COMPRESSION_ETC2";
- case SG_FEATURE_TEXTURE_FLOAT: return "SG_FEATURE_TEXTURE_FLOAT";
- case SG_FEATURE_TEXTURE_HALF_FLOAT: return "SG_FEATURE_TEXTURE_HALF_FLOAT";
- case SG_FEATURE_ORIGIN_BOTTOM_LEFT: return "SG_FEATURE_ORIGIN_BOTTOM_LEFT";
- case SG_FEATURE_ORIGIN_TOP_LEFT: return "SG_FEATURE_ORIGIN_TOP_LEFT";
- case SG_FEATURE_MSAA_RENDER_TARGETS: return "SG_FEATURE_MSAA_RENDER_TARGETS";
- case SG_FEATURE_PACKED_VERTEX_FORMAT_10_2: return "SG_FEATURE_PACKED_VERTEX_FORMAT_10_2";
- case SG_FEATURE_MULTIPLE_RENDER_TARGET: return "SG_FEATURE_MULTIPLE_RENDER_TARGET";
- case SG_FEATURE_IMAGETYPE_3D: return "SG_FEATURE_IMAGETYPE_3D";
- case SG_FEATURE_IMAGETYPE_ARRAY: return "SG_FEATURE_IMAGETYPE_ARRAY";
- default: return "???";
- }
-}
-
_SOKOL_PRIVATE const char* _sg_imgui_resourcestate_string(sg_resource_state s) {
switch (s) {
case SG_RESOURCESTATE_INITIAL: return "SG_RESOURCESTATE_INITIAL";
@@ -771,30 +744,65 @@ _SOKOL_PRIVATE const char* _sg_imgui_imagetype_string(sg_image_type t) {
_SOKOL_PRIVATE const char* _sg_imgui_pixelformat_string(sg_pixel_format fmt) {
switch (fmt) {
- case SG_PIXELFORMAT_NONE: return "SG_PIXELFORMAT_NONE";
- case SG_PIXELFORMAT_RGBA8: return "SG_PIXELFORMAT_RGBA8";
- case SG_PIXELFORMAT_RGB8: return "SG_PIXELFORMAT_RGB8";
- case SG_PIXELFORMAT_RGBA4: return "SG_PIXELFORMAT_RGBA4";
- case SG_PIXELFORMAT_R5G6B5: return "SG_PIXELFORMAT_R5G6B5";
- case SG_PIXELFORMAT_R5G5B5A1: return "SG_PIXELFORMAT_R5G5B5A1";
- case SG_PIXELFORMAT_R10G10B10A2: return "SG_PIXELFORMAT_R10G10B10A2";
- case SG_PIXELFORMAT_RGBA32F: return "SG_PIXELFORMAT_RGBA32F";
- case SG_PIXELFORMAT_RGBA16F: return "SG_PIXELFORMAT_RGBA16F";
- case SG_PIXELFORMAT_R32F: return "SG_PIXELFORMAT_R32F";
- case SG_PIXELFORMAT_R16F: return "SG_PIXELFORMAT_R16F";
- case SG_PIXELFORMAT_L8: return "SG_PIXELFORMAT_L8";
- case SG_PIXELFORMAT_DXT1: return "SG_PIXELFORMAT_DXT1";
- case SG_PIXELFORMAT_DXT3: return "SG_PIXELFORMAT_DXT3";
- case SG_PIXELFORMAT_DXT5: return "SG_PIXELFORMAT_DXT5";
- case SG_PIXELFORMAT_DEPTH: return "SG_PIXELFORMAT_DEPTH";
- case SG_PIXELFORMAT_DEPTHSTENCIL: return "SG_PIXELFORMAT_DEPTHSTENCIL";
- case SG_PIXELFORMAT_PVRTC2_RGB: return "SG_PIXELFORMAT_PVRTC2_RGB";
- case SG_PIXELFORMAT_PVRTC4_RGB: return "SG_PIXELFORMAT_PVRTC4_RGB";
- case SG_PIXELFORMAT_PVRTC2_RGBA: return "SG_PIXELFORMAT_PVRTC2_RGBA";
- case SG_PIXELFORMAT_PVRTC4_RGBA: return "SG_PIXELFORMAT_PVRTC4_RGBA";
- case SG_PIXELFORMAT_ETC2_RGB8: return "SG_PIXELFORMAT_ETC2_RGB8";
- case SG_PIXELFORMAT_ETC2_SRGB8: return "SG_PIXELFORMAT_ETC2_SRGB8";
- default: return "???";
+ case SG_PIXELFORMAT_NONE: return "SG_PIXELFORMAT_NONE";
+ case SG_PIXELFORMAT_R8: return "SG_PIXELFORMAT_R8";
+ case SG_PIXELFORMAT_R8SN: return "SG_PIXELFORMAT_R8SN";
+ case SG_PIXELFORMAT_R8UI: return "SG_PIXELFORMAT_R8UI";
+ case SG_PIXELFORMAT_R8SI: return "SG_PIXELFORMAT_R8SI";
+ case SG_PIXELFORMAT_R16: return "SG_PIXELFORMAT_R16";
+ case SG_PIXELFORMAT_R16SN: return "SG_PIXELFORMAT_R16SN";
+ case SG_PIXELFORMAT_R16UI: return "SG_PIXELFORMAT_R16UI";
+ case SG_PIXELFORMAT_R16SI: return "SG_PIXELFORMAT_R16SI";
+ case SG_PIXELFORMAT_R16F: return "SG_PIXELFORMAT_R16F";
+ case SG_PIXELFORMAT_RG8: return "SG_PIXELFORMAT_RG8";
+ case SG_PIXELFORMAT_RG8SN: return "SG_PIXELFORMAT_RG8SN";
+ case SG_PIXELFORMAT_RG8UI: return "SG_PIXELFORMAT_RG8UI";
+ case SG_PIXELFORMAT_RG8SI: return "SG_PIXELFORMAT_RG8SI";
+ case SG_PIXELFORMAT_R32UI: return "SG_PIXELFORMAT_R32UI";
+ case SG_PIXELFORMAT_R32SI: return "SG_PIXELFORMAT_R32SI";
+ case SG_PIXELFORMAT_R32F: return "SG_PIXELFORMAT_R32F";
+ case SG_PIXELFORMAT_RG16: return "SG_PIXELFORMAT_RG16";
+ case SG_PIXELFORMAT_RG16SN: return "SG_PIXELFORMAT_RG16SN";
+ case SG_PIXELFORMAT_RG16UI: return "SG_PIXELFORMAT_RG16UI";
+ case SG_PIXELFORMAT_RG16SI: return "SG_PIXELFORMAT_RG16SI";
+ case SG_PIXELFORMAT_RG16F: return "SG_PIXELFORMAT_RG16F";
+ case SG_PIXELFORMAT_RGBA8: return "SG_PIXELFORMAT_RGBA8";
+ case SG_PIXELFORMAT_RGBA8SN: return "SG_PIXELFORMAT_RGBA8SN";
+ case SG_PIXELFORMAT_RGBA8UI: return "SG_PIXELFORMAT_RGBA8UI";
+ case SG_PIXELFORMAT_RGBA8SI: return "SG_PIXELFORMAT_RGBA8SI";
+ case SG_PIXELFORMAT_BGRA8: return "SG_PIXELFORMAT_BGRA8";
+ case SG_PIXELFORMAT_RGB10A2: return "SG_PIXELFORMAT_RGB10A2";
+ case SG_PIXELFORMAT_RG11B10F: return "SG_PIXELFORMAT_RG11B10F";
+ case SG_PIXELFORMAT_RG32UI: return "SG_PIXELFORMAT_RG32UI";
+ case SG_PIXELFORMAT_RG32SI: return "SG_PIXELFORMAT_RG32SI";
+ case SG_PIXELFORMAT_RG32F: return "SG_PIXELFORMAT_RG32F";
+ case SG_PIXELFORMAT_RGBA16: return "SG_PIXELFORMAT_RGBA16";
+ case SG_PIXELFORMAT_RGBA16SN: return "SG_PIXELFORMAT_RGBA16SN";
+ case SG_PIXELFORMAT_RGBA16UI: return "SG_PIXELFORMAT_RGBA16UI";
+ case SG_PIXELFORMAT_RGBA16SI: return "SG_PIXELFORMAT_RGBA16SI";
+ case SG_PIXELFORMAT_RGBA16F: return "SG_PIXELFORMAT_RGBA16F";
+ case SG_PIXELFORMAT_RGBA32UI: return "SG_PIXELFORMAT_RGBA32UI";
+ case SG_PIXELFORMAT_RGBA32SI: return "SG_PIXELFORMAT_RGBA32SI";
+ case SG_PIXELFORMAT_RGBA32F: return "SG_PIXELFORMAT_RGBA32F";
+ case SG_PIXELFORMAT_DEPTH: return "SG_PIXELFORMAT_DEPTH";
+ case SG_PIXELFORMAT_DEPTH_STENCIL: return "SG_PIXELFORMAT_DEPTH_STENCIL";
+ case SG_PIXELFORMAT_BC1_RGBA: return "SG_PIXELFORMAT_BC1_RGBA";
+ case SG_PIXELFORMAT_BC2_RGBA: return "SG_PIXELFORMAT_BC2_RGBA";
+ case SG_PIXELFORMAT_BC3_RGBA: return "SG_PIXELFORMAT_BC3_RGBA";
+ case SG_PIXELFORMAT_BC4_R: return "SG_PIXELFORMAT_BC4_R";
+ case SG_PIXELFORMAT_BC4_RSN: return "SG_PIXELFORMAT_BC4_RSN";
+ case SG_PIXELFORMAT_BC5_RG: return "SG_PIXELFORMAT_BC5_RG";
+ case SG_PIXELFORMAT_BC5_RGSN: return "SG_PIXELFORMAT_BC5_RGSN";
+ case SG_PIXELFORMAT_BC6H_RGBF: return "SG_PIXELFORMAT_BC6H_RGBF";
+ case SG_PIXELFORMAT_BC6H_RGBUF: return "SG_PIXELFORMAT_BC6H_RGBUF";
+ case SG_PIXELFORMAT_BC7_RGBA: return "SG_PIXELFORMAT_BC7_RGBA";
+ case SG_PIXELFORMAT_PVRTC_RGB_2BPP: return "SG_PIXELFORMAT_PVRTC_RGB_2BPP";
+ case SG_PIXELFORMAT_PVRTC_RGB_4BPP: return "SG_PIXELFORMAT_PVRTC_RGB_4BPP";
+ case SG_PIXELFORMAT_PVRTC_RGBA_2BPP: return "SG_PIXELFORMAT_PVRTC_RGBA_2BPP";
+ case SG_PIXELFORMAT_PVRTC_RGBA_4BPP: return "SG_PIXELFORMAT_PVRTC_RGBA_4BPP";
+ case SG_PIXELFORMAT_ETC2_RGB8: return "SG_PIXELFORMAT_ETC2_RGB8";
+ case SG_PIXELFORMAT_ETC2_RGB8A1: return "SG_PIXELFORMAT_ETC2_RGB8A1";
+ default: return "???";
}
}
@@ -1286,13 +1294,6 @@ _SOKOL_PRIVATE sg_imgui_str_t _sg_imgui_capture_item_string(sg_imgui_t* ctx, int
sg_imgui_str_t str = _sg_imgui_make_str(0);
sg_imgui_str_t res_id = _sg_imgui_make_str(0);
switch (item->cmd) {
- case SG_IMGUI_CMD_QUERY_FEATURE:
- _sg_imgui_snprintf(&str, "%d: sg_query_feature(feature=%s) => %s",
- index,
- _sg_imgui_feature_string(item->args.query_feature.feature),
- _sg_imgui_bool_string(item->args.query_feature.result));
- break;
-
case SG_IMGUI_CMD_RESET_STATE_CACHE:
_sg_imgui_snprintf(&str, "%d: sg_reset_state_cache()", index);
break;
@@ -1560,21 +1561,6 @@ _SOKOL_PRIVATE sg_imgui_str_t _sg_imgui_capture_item_string(sg_imgui_t* ctx, int
}
/*--- CAPTURE CALLBACKS ------------------------------------------------------*/
-_SOKOL_PRIVATE void _sg_imgui_query_feature(sg_feature feature, bool result, void* user_data) {
- sg_imgui_t* ctx = (sg_imgui_t*) user_data;
- SOKOL_ASSERT(ctx);
- sg_imgui_capture_item_t* item = _sg_imgui_capture_next_write_item(ctx);
- if (item) {
- item->cmd = SG_IMGUI_CMD_QUERY_FEATURE;
- item->color = _SG_IMGUI_COLOR_OTHER;
- item->args.query_feature.feature = feature;
- item->args.query_feature.result = result;
- }
- if (ctx->hooks.query_feature) {
- ctx->hooks.query_feature(feature, result, ctx->hooks.user_data);
- }
-}
-
_SOKOL_PRIVATE void _sg_imgui_reset_state_cache(void* user_data) {
sg_imgui_t* ctx = (sg_imgui_t*) user_data;
SOKOL_ASSERT(ctx);
@@ -2556,12 +2542,7 @@ _SOKOL_PRIVATE void _sg_imgui_draw_buffer_panel(sg_imgui_t* ctx, sg_buffer buf)
}
_SOKOL_PRIVATE bool _sg_imgui_image_renderable(sg_imgui_t* ctx, sg_image_type type, sg_pixel_format fmt) {
- if ((SG_IMAGETYPE_2D != type) || (SG_PIXELFORMAT_DEPTH == fmt) || (SG_PIXELFORMAT_DEPTHSTENCIL == fmt)) {
- return false;
- }
- else {
- return true;
- }
+ return sg_query_caps().formats[fmt].valid && !sg_query_caps().formats[fmt].depth;
}
_SOKOL_PRIVATE void _sg_imgui_draw_embedded_image(sg_imgui_t* ctx, sg_image img, float* scale) {
@@ -3087,8 +3068,6 @@ _SOKOL_PRIVATE void _sg_imgui_draw_capture_panel(sg_imgui_t* ctx) {
ImGui::PopStyleColor();
ImGui::Separator();
switch (item->cmd) {
- case SG_IMGUI_CMD_QUERY_FEATURE:
- break;
case SG_IMGUI_CMD_RESET_STATE_CACHE:
break;
case SG_IMGUI_CMD_MAKE_BUFFER:
@@ -3219,7 +3198,6 @@ SOKOL_API_IMPL void sg_imgui_init(sg_imgui_t* ctx) {
sg_trace_hooks hooks;
memset(&hooks, 0, sizeof(hooks));
hooks.user_data = (void*) ctx;
- hooks.query_feature = _sg_imgui_query_feature;
hooks.reset_state_cache = _sg_imgui_reset_state_cache;
hooks.make_buffer = _sg_imgui_make_buffer;
hooks.make_image = _sg_imgui_make_image;