diff options
| author | Andre Weissflog <floooh@gmail.com> | 2019-04-26 18:05:17 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-04-26 18:05:17 +0200 |
| commit | eaae3947d8171ba6b842d46629df48c027f97822 (patch) | |
| tree | 41302371aba9ed7b4c39f2fe03cb5957017cb45f /util | |
| parent | 339bf9b4833361d7b47549b98c37c0a6a2b7cb6c (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.h | 42 | ||||
| -rw-r--r-- | util/sokol_gl.h | 12 | ||||
| -rw-r--r-- | util/sokol_imgui.h | 24 |
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; |