On 4/14/21 7:57 AM, Henri Verbeet wrote:
On Wed, 14 Apr 2021 at 07:03, Zebediah Figura <zfigura(a)codeweavers.com> wrote:
diff --git a/include/vkd3d_d3dx9shader.h b/include/vkd3d_d3dx9shader.h new file mode 100644 index 00000000..ba69efbd --- /dev/null +++ b/include/vkd3d_d3dx9shader.h Should this be an IDL file? I'm not sure how much of d3dx9shader.h we intend to provide, but it does have COM interfaces like ID3DXConstantTable.
I guess it depends if we want ID3DXConstantTable in vkd3d, which isn't clear to me, but either way it seems quite easy to make it an IDL.
+static void put_string(struct bytecode_buffer *buffer, const char *str) +{ + unsigned int len = (strlen(str) + 1 + 3) / sizeof(DWORD); + sizeof(*buffer->data), perhaps.
+ if (buffer->status) + return; + + if (!vkd3d_array_reserve((void **)&buffer->data, &buffer->size, buffer->count + len, sizeof(*buffer->data))) + { + buffer->status = E_OUTOFMEMORY; + return; + } + + buffer->data[buffer->count + len - 1] = 0xabababab; + strcpy((char *)(buffer->data + buffer->count), str); + buffer->count += len; +} You pretty much never want to use strcpy(). In this particular case, we already calculated the string length above, and could use memcpy().
+static void write_sm1_uniforms(struct hlsl_ctx *ctx, struct bytecode_buffer *buffer, + struct hlsl_ir_function_decl *entry_func) +{ + unsigned int ctab_start, vars_start; + unsigned int uniform_count = 0; + struct hlsl_ir_var *var; + + LIST_FOR_EACH_ENTRY(var, &ctx->extern_vars, struct hlsl_ir_var, extern_entry) + { + if (!var->semantic && var->reg.allocated) + { + ++uniform_count; + + if (var->is_param && var->is_uniform) + { + char *name; + + if (!(name = vkd3d_malloc(strlen(var->name) + 2))) + { + buffer->status = VKD3D_ERROR_OUT_OF_MEMORY; + return; + } + name[0] = '$'; + strcpy(name + 1, var->name); + vkd3d_free((char *)var->name); + var->name = name; + } + } + } + Likewise.
+ set_dword(buffer, ctab_start + 1, (buffer->count - ctab_start) * sizeof(DWORD)); + put_string(buffer, "vkd3d HLSL shader compiler"); + I imagine we would want to include the version here, perhaps even simply the output of vkd3d_shader_get_version().