HRESULT d3d10_pixel_shader_init(struct d3d10_pixel_shader *shader, struct d3d10_device *device, const void *byte_code, SIZE_T byte_code_length) { struct d3d10_shader_info shader_info; HRESULT hr; shader->ID3D10PixelShader_iface.lpVtbl = &d3d10_pixel_shader_vtbl; shader->refcount = 1; shader_info.output_signature = &shader->output_signature; hr = shader_extract_from_dxbc(byte_code, byte_code_length, &shader_info); if (FAILED(hr)) { ERR("Failed to extract shader, hr %#x.\n", hr); return hr; } hr = wined3d_shader_create_ps(device->wined3d_device, shader_info.shader_code, &shader->output_signature, shader, &d3d10_pixel_shader_wined3d_parent_ops, &shader->wined3d_shader, 4); if (FAILED(hr)) { WARN("Failed to create wined3d pixel shader, hr %#x.\n", hr); shader_free_signature(&shader->output_signature); hr = E_INVALIDARG; return hr; } shader->device = &device->ID3D10Device1_iface; ID3D10Device1_AddRef(shader->device); return S_OK; }
HRESULT d3d10_pixel_shader_init(struct d3d10_pixel_shader *shader, struct d3d10_device *device, const void *byte_code, SIZE_T byte_code_length) { struct d3d10_shader_info shader_info; HRESULT hr; shader->vtbl = &d3d10_pixel_shader_vtbl; shader->refcount = 1; shader_info.output_signature = &shader->output_signature; hr = shader_extract_from_dxbc(byte_code, byte_code_length, &shader_info); if (FAILED(hr)) { ERR("Failed to extract shader, hr %#x.\n", hr); return hr; } hr = IWineD3DDevice_CreatePixelShader(device->wined3d_device, shader_info.shader_code, &shader->output_signature, shader, &d3d10_pixel_shader_wined3d_parent_ops, &shader->wined3d_shader); if (FAILED(hr)) { WARN("Failed to create wined3d pixel shader, hr %#x.\n", hr); shader_free_signature(&shader->output_signature); return hr; } return S_OK; }
HRESULT d3d10_geometry_shader_init(struct d3d10_geometry_shader *shader, struct d3d10_device *device, const void *byte_code, SIZE_T byte_code_length) { struct d3d10_shader_info shader_info; HRESULT hr; shader->ID3D10GeometryShader_iface.lpVtbl = &d3d10_geometry_shader_vtbl; shader->refcount = 1; shader_info.output_signature = &shader->output_signature; hr = shader_extract_from_dxbc(byte_code, byte_code_length, &shader_info); if (FAILED(hr)) { ERR("Failed to extract shader, hr %#x.\n", hr); return hr; } hr = wined3d_shader_create_gs(device->wined3d_device, shader_info.shader_code, &shader->output_signature, shader, &d3d10_geometry_shader_wined3d_parent_ops, &shader->wined3d_shader); if (FAILED(hr)) { WARN("Failed to create wined3d vertex shader, hr %#x.\n", hr); shader_free_signature(&shader->output_signature); return hr; } return S_OK; }
static HRESULT d3d_geometry_shader_init(struct d3d_geometry_shader *shader, struct d3d_device *device, const void *byte_code, SIZE_T byte_code_length) { struct wined3d_shader_signature output_signature; struct wined3d_shader_signature input_signature; struct d3d_shader_info shader_info; struct wined3d_shader_desc desc; HRESULT hr; shader->ID3D11GeometryShader_iface.lpVtbl = &d3d11_geometry_shader_vtbl; shader->ID3D10GeometryShader_iface.lpVtbl = &d3d10_geometry_shader_vtbl; shader->refcount = 1; wined3d_mutex_lock(); wined3d_private_store_init(&shader->private_store); shader_info.input_signature = &input_signature; shader_info.output_signature = &output_signature; if (FAILED(hr = shader_extract_from_dxbc(byte_code, byte_code_length, &shader_info))) { ERR("Failed to extract shader, hr %#x.\n", hr); wined3d_private_store_cleanup(&shader->private_store); wined3d_mutex_unlock(); return hr; } desc.byte_code = shader_info.shader_code; desc.input_signature = &input_signature; desc.output_signature = &output_signature; desc.max_version = 4; hr = wined3d_shader_create_gs(device->wined3d_device, &desc, shader, &d3d_geometry_shader_wined3d_parent_ops, &shader->wined3d_shader); shader_free_signature(&input_signature); shader_free_signature(&output_signature); if (FAILED(hr)) { WARN("Failed to create wined3d geometry shader, hr %#x.\n", hr); wined3d_private_store_cleanup(&shader->private_store); wined3d_mutex_unlock(); return E_INVALIDARG; } wined3d_mutex_unlock(); shader->device = &device->ID3D11Device_iface; ID3D11Device_AddRef(shader->device); return S_OK; }