aboutsummaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorAndre Weissflog <floooh@gmail.com>2019-04-26 18:05:17 +0200
committerGitHub <noreply@github.com>2019-04-26 18:05:17 +0200
commiteaae3947d8171ba6b842d46629df48c027f97822 (patch)
tree41302371aba9ed7b4c39f2fe03cb5957017cb45f /util
parent339bf9b4833361d7b47549b98c37c0a6a2b7cb6c (diff)
Move vertex-attr names/semantics from sg_pipeline_desc to sg_shader_desc (#146)
* sokol_gfx.h: start working moving vertex attr names into sg_shader_desc * sokol_gfx.h: move vertex attribute names into shader desc * sokol_gfx.h: D3D11 backend fixes * fix typo in GLES2 shader-attr validation * add shader-attribute change to README update section * remove unused _sg_make_str function
Diffstat (limited to 'util')
-rw-r--r--util/sokol_gfx_imgui.h42
-rw-r--r--util/sokol_gl.h12
-rw-r--r--util/sokol_imgui.h24
3 files changed, 43 insertions, 35 deletions
diff --git a/util/sokol_gfx_imgui.h b/util/sokol_gfx_imgui.h
index e702c88c..808fd122 100644
--- a/util/sokol_gfx_imgui.h
+++ b/util/sokol_gfx_imgui.h
@@ -185,14 +185,14 @@ typedef struct {
sg_imgui_str_t fs_entry;
sg_imgui_str_t fs_image_name[SG_MAX_SHADERSTAGE_IMAGES];
sg_imgui_str_t fs_uniform_name[SG_MAX_SHADERSTAGE_UBS][SG_MAX_UB_MEMBERS];
+ sg_imgui_str_t attr_name[SG_MAX_VERTEX_ATTRIBUTES];
+ sg_imgui_str_t attr_sem_name[SG_MAX_VERTEX_ATTRIBUTES];
sg_shader_desc desc;
} sg_imgui_shader_t;
typedef struct {
sg_pipeline res_id;
sg_imgui_str_t label;
- sg_imgui_str_t attr_name[SG_MAX_VERTEX_ATTRIBUTES];
- sg_imgui_str_t attr_sem_name[SG_MAX_VERTEX_ATTRIBUTES];
sg_pipeline_desc desc;
} sg_imgui_pipeline_t;
@@ -1109,6 +1109,17 @@ _SOKOL_PRIVATE void _sg_imgui_shader_created(sg_imgui_t* ctx, sg_shader res_id,
if (shd->desc.fs.byte_code) {
shd->desc.fs.byte_code = _sg_imgui_bin_dup(shd->desc.fs.byte_code, shd->desc.fs.byte_code_size);
}
+ for (int i = 0; i < SG_MAX_VERTEX_ATTRIBUTES; i++) {
+ sg_shader_attr_desc* ad = &shd->desc.attrs[i];
+ if (ad->name) {
+ shd->attr_name[i] = _sg_imgui_make_str(ad->name);
+ ad->name = shd->attr_name[i].buf;
+ }
+ if (ad->sem_name) {
+ shd->attr_sem_name[i] = _sg_imgui_make_str(ad->sem_name);
+ ad->sem_name = shd->attr_sem_name[i].buf;
+ }
+ }
}
_SOKOL_PRIVATE void _sg_imgui_shader_destroyed(sg_imgui_t* ctx, int slot_index) {
@@ -1140,18 +1151,6 @@ _SOKOL_PRIVATE void _sg_imgui_pipeline_created(sg_imgui_t* ctx, sg_pipeline res_
pip->label = _sg_imgui_make_str(desc->label);
pip->desc = *desc;
- /* copy strings in vertex layout to persistent location */
- for (int i = 0; i < SG_MAX_VERTEX_ATTRIBUTES; i++) {
- sg_vertex_attr_desc* ad = &pip->desc.layout.attrs[i];
- if (ad->name) {
- pip->attr_name[i] = _sg_imgui_make_str(ad->name);
- ad->name = pip->attr_name[i].buf;
- }
- if (ad->sem_name) {
- pip->attr_sem_name[i] = _sg_imgui_make_str(ad->sem_name);
- ad->sem_name = pip->attr_sem_name[i].buf;
- }
- }
}
_SOKOL_PRIVATE void _sg_imgui_pipeline_destroyed(sg_imgui_t* ctx, int slot_index) {
@@ -2683,6 +2682,18 @@ _SOKOL_PRIVATE void _sg_imgui_draw_shader_panel(sg_imgui_t* ctx, sg_shader shd)
ImGui::Text("Label: %s", shd_ui->label.buf[0] ? shd_ui->label.buf : "---");
_sg_imgui_draw_resource_slot(&info.slot);
ImGui::Separator();
+ if (ImGui::TreeNode("Attrs")) {
+ for (int i = 0; i < SG_MAX_VERTEX_ATTRIBUTES; i++) {
+ const sg_shader_attr_desc* a_desc = &shd_ui->desc.attrs[i];
+ if (a_desc->name || a_desc->sem_index) {
+ ImGui::Text("#%d:", i);
+ ImGui::Text(" Name: %s", a_desc->name ? a_desc->name : "---");
+ ImGui::Text(" Sem Name: %s", a_desc->sem_name ? a_desc->sem_name : "---");
+ ImGui::Text(" Sem Index: %d", a_desc->sem_index);
+ }
+ }
+ ImGui::TreePop();
+ }
if (ImGui::TreeNode("Vertex Shader Stage")) {
_sg_imgui_draw_shader_stage(ctx, &shd_ui->desc.vs);
ImGui::TreePop();
@@ -2718,9 +2729,6 @@ _SOKOL_PRIVATE void _sg_imgui_draw_vertex_layout(const sg_layout_desc* layout) {
if (a_desc->format != SG_VERTEXFORMAT_INVALID) {
ImGui::Text("#%d:", i);
ImGui::Text(" Format: %s", _sg_imgui_vertexformat_string(a_desc->format));
- ImGui::Text(" Name: %s", a_desc->name ? a_desc->name : "---");
- ImGui::Text(" Sem Name: %s", a_desc->sem_name ? a_desc->sem_name : "---");
- ImGui::Text(" Sem Index: %d", a_desc->sem_index);
ImGui::Text(" Offset: %d", a_desc->offset);
ImGui::Text(" Buffer Index: %d", a_desc->buffer_index);
}
diff --git a/util/sokol_gl.h b/util/sokol_gl.h
index 4f1b1738..38931020 100644
--- a/util/sokol_gl.h
+++ b/util/sokol_gl.h
@@ -1314,22 +1314,16 @@ static void _sgl_init_pipeline(sgl_pipeline pip_id, const sg_pipeline_desc* in_d
desc.layout.buffers[0].stride = sizeof(_sgl_vertex_t);
{
sg_vertex_attr_desc* pos = &desc.layout.attrs[0];
- pos->name = "position";
- pos->sem_name = "POSITION";
pos->offset = offsetof(_sgl_vertex_t, pos);
pos->format = SG_VERTEXFORMAT_FLOAT3;
}
{
sg_vertex_attr_desc* uv = &desc.layout.attrs[1];
- uv->name = "texcoord0";
- uv->sem_name = "TEXCOORD";
uv->offset = offsetof(_sgl_vertex_t, uv);
uv->format = SG_VERTEXFORMAT_FLOAT2;
}
{
sg_vertex_attr_desc* rgba = &desc.layout.attrs[2];
- rgba->name = "color0";
- rgba->sem_name = "COLOR";
rgba->offset = offsetof(_sgl_vertex_t, rgba);
rgba->format = SG_VERTEXFORMAT_UBYTE4N;
}
@@ -1771,6 +1765,12 @@ SOKOL_API_IMPL void sgl_setup(const sgl_desc_t* desc) {
sg_shader_desc shd_desc;
memset(&shd_desc, 0, sizeof(shd_desc));
+ shd_desc.attrs[0].name = "position";
+ shd_desc.attrs[1].name = "texcoord0";
+ shd_desc.attrs[2].name = "color0";
+ shd_desc.attrs[0].sem_name = "POSITION";
+ shd_desc.attrs[1].sem_name = "TEXCOORD";
+ shd_desc.attrs[2].sem_name = "COLOR";
sg_shader_uniform_block_desc* ub = &shd_desc.vs.uniform_blocks[0];
ub->size = sizeof(_sgl_uniform_t);
ub->uniforms[0].name = "mvp";
diff --git a/util/sokol_imgui.h b/util/sokol_imgui.h
index f272d16f..02c90bb9 100644
--- a/util/sokol_imgui.h
+++ b/util/sokol_imgui.h
@@ -755,6 +755,12 @@ SOKOL_API_IMPL void simgui_setup(const simgui_desc_t* desc) {
ub.size = sizeof(_simgui_vs_params_t);
ub.uniforms[0].name = "disp_size";
ub.uniforms[0].type = SG_UNIFORMTYPE_FLOAT2;
+ shd_desc.attrs[0].name = "position";
+ shd_desc.attrs[0].sem_name = "POSITION";
+ shd_desc.attrs[1].name = "texcoord0";
+ shd_desc.attrs[1].sem_name = "TEXCOORD";
+ shd_desc.attrs[2].name = "color0";
+ shd_desc.attrs[2].sem_name = "COLOR";
shd_desc.fs.images[0].name = "tex";
shd_desc.fs.images[0].type = SG_IMAGETYPE_2D;
#if defined(SOKOL_D3D11)
@@ -774,24 +780,18 @@ SOKOL_API_IMPL void simgui_setup(const simgui_desc_t* desc) {
pip_desc.layout.buffers[0].stride = sizeof(ImDrawVert);
{
auto& attr = pip_desc.layout.attrs[0];
- attr.name = "position";
- attr.sem_name = "POSITION";
- attr.offset = offsetof(ImDrawVert, pos);
- attr.format = SG_VERTEXFORMAT_FLOAT2;
+ attr.offset = offsetof(ImDrawVert, pos);
+ attr.format = SG_VERTEXFORMAT_FLOAT2;
}
{
auto& attr = pip_desc.layout.attrs[1];
- attr.name = "texcoord0";
- attr.sem_name = "TEXCOORD";
- attr.offset = offsetof(ImDrawVert, uv);
- attr.format = SG_VERTEXFORMAT_FLOAT2;
+ attr.offset = offsetof(ImDrawVert, uv);
+ attr.format = SG_VERTEXFORMAT_FLOAT2;
}
{
auto& attr = pip_desc.layout.attrs[2];
- attr.name = "color0";
- attr.sem_name = "COLOR";
- attr.offset = offsetof(ImDrawVert, col);
- attr.format = SG_VERTEXFORMAT_UBYTE4N;
+ attr.offset = offsetof(ImDrawVert, col);
+ attr.format = SG_VERTEXFORMAT_UBYTE4N;
}
pip_desc.shader = _simgui.shd;
pip_desc.index_type = SG_INDEXTYPE_UINT16;