Commit 372dc31e authored by Henri Verbeet's avatar Henri Verbeet Committed by Alexandre Julliard

d3dcompiler: Use vkd3d_shader_parse_dxbc() in d3dcompiler_strip_shader().

parent 7dfd32d5
...@@ -348,10 +348,11 @@ static BOOL check_blob_strip(DWORD tag, UINT flags) ...@@ -348,10 +348,11 @@ static BOOL check_blob_strip(DWORD tag, UINT flags)
static HRESULT d3dcompiler_strip_shader(const void *data, SIZE_T data_size, UINT flags, ID3DBlob **blob) static HRESULT d3dcompiler_strip_shader(const void *data, SIZE_T data_size, UINT flags, ID3DBlob **blob)
{ {
const struct vkd3d_shader_code src_dxbc = {.code = data, .size = data_size};
struct vkd3d_shader_dxbc_section_desc *sections; struct vkd3d_shader_dxbc_section_desc *sections;
struct vkd3d_shader_dxbc_desc src_dxbc_desc;
struct vkd3d_shader_code dst_dxbc; struct vkd3d_shader_code dst_dxbc;
unsigned int section_count, i; unsigned int section_count, i;
struct dxbc src_dxbc;
HRESULT hr; HRESULT hr;
int ret; int ret;
...@@ -367,24 +368,23 @@ static HRESULT d3dcompiler_strip_shader(const void *data, SIZE_T data_size, UINT ...@@ -367,24 +368,23 @@ static HRESULT d3dcompiler_strip_shader(const void *data, SIZE_T data_size, UINT
return D3DERR_INVALIDCALL; return D3DERR_INVALIDCALL;
} }
hr = dxbc_parse(data, data_size, &src_dxbc); if ((ret = vkd3d_shader_parse_dxbc(&src_dxbc, 0, &src_dxbc_desc, NULL)) < 0)
if (FAILED(hr))
{ {
WARN("Failed to parse blob part\n"); WARN("Failed to parse source data, ret %d.\n", ret);
return hr; return E_FAIL;
} }
/* src_dxbc.count >= dst_dxbc.count */ /* src_dxbc.count >= dst_dxbc.count */
if (!(sections = calloc(src_dxbc.count, sizeof(*sections)))) if (!(sections = calloc(src_dxbc_desc.section_count, sizeof(*sections))))
{ {
ERR("Failed to allocate sections memory.\n"); ERR("Failed to allocate sections memory.\n");
dxbc_destroy(&src_dxbc); vkd3d_shader_free_dxbc(&src_dxbc_desc);
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
} }
for (i = 0, section_count = 0; i < src_dxbc.count; ++i) for (i = 0, section_count = 0; i < src_dxbc_desc.section_count; ++i)
{ {
const struct vkd3d_shader_dxbc_section_desc *src_section = &src_dxbc.sections[i]; const struct vkd3d_shader_dxbc_section_desc *src_section = &src_dxbc_desc.sections[i];
if (check_blob_strip(src_section->tag, flags)) if (check_blob_strip(src_section->tag, flags))
sections[section_count++] = *src_section; sections[section_count++] = *src_section;
...@@ -405,7 +405,7 @@ static HRESULT d3dcompiler_strip_shader(const void *data, SIZE_T data_size, UINT ...@@ -405,7 +405,7 @@ static HRESULT d3dcompiler_strip_shader(const void *data, SIZE_T data_size, UINT
done: done:
free(sections); free(sections);
dxbc_destroy(&src_dxbc); vkd3d_shader_free_dxbc(&src_dxbc_desc);
return hr; return hr;
} }
......
...@@ -375,7 +375,7 @@ static void test_get_blob_part(void) ...@@ -375,7 +375,7 @@ static void test_get_blob_part(void)
ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#lx.\n", hr); ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#lx.\n", hr);
hr = D3DStripShader(test_blob_part, 8 * sizeof(DWORD), 0, &blob); hr = D3DStripShader(test_blob_part, 8 * sizeof(DWORD), 0, &blob);
#if D3D_COMPILER_VERSION < 46 #if D3D_COMPILER_VERSION >= 46
todo_wine todo_wine
#endif #endif
ok(hr == expected, "Got unexpected hr %#lx.\n", hr); ok(hr == expected, "Got unexpected hr %#lx.\n", hr);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment