37 WARN(
"Invalid shader bytecode.\n");
53#define D3DXERR_INVALIDDATA 0x88760b59
63 0, 0, { (
DWORD_PTR)(__FILE__
": wpp_mutex") }
83 const char *initial_dir;
91 len = initial_dir -
include->initial_filename + 1;
92 initial_dir =
include->initial_filename;
97 current_dir[
len] =
'\\';
99 initial_dir = current_dir;
133 WARN(
"Returning E_FAIL.\n");
153 unsigned int size = 0;
171 ID3DInclude_Close(iface,
code->code);
212 compile_info.
next = &preprocess_info;
214 compile_info.
source.size = data_size;
238 ERR(
"Failed to preprocess shader, vkd3d result %d.\n",
ret);
247 ERR(
"Shader log:\n");
279 memcpy(ID3D10Blob_GetBufferPointer(*shader_blob), byte_code.
code, byte_code.
size);
298 TRACE(
"Assembler messages:\n");
301 TRACE(
"Shader source:\n");
316 pos = ID3D10Blob_GetBufferPointer(
buffer);
317 if (preproc_messages)
332 ERR(
"Asm reading failed\n");
340 ERR(
"Failed to write bytecode, hr %#lx.\n",
hr);
365 unsigned int preproc_size;
367 char *preproc_terminated;
370 TRACE(
"data %p, datasize %Iu, filename %s, defines %p, include %p, sflags %#x, "
371 "shader %p, error_messages %p.\n",
385 preproc_size = ID3D10Blob_GetBufferSize(preproc_shader);
386 if ((preproc_terminated =
malloc(preproc_size + 1)))
388 memcpy(preproc_terminated, ID3D10Blob_GetBufferPointer(preproc_shader), preproc_size);
389 ID3D10Blob_Release(preproc_shader);
390 preproc_terminated[preproc_size] = 0;
393 free(preproc_terminated);
402 size_t profile_len,
i;
404 static const char *
const d3dbc_profiles[] =
425 static const char *
const fx_profiles[] =
454 const void *secondary_data,
SIZE_T secondary_data_size,
ID3DBlob **shader_blob,
469 TRACE(
"data %p, data_size %Iu, filename %s, macros %p, include %p, entry_point %s, "
470 "profile %s, flags %#x, effect_flags %#x, secondary_flags %#x, secondary_data %p, "
471 "secondary_data_size %Iu, shader_blob %p, messages_blob %p.\n",
474 secondary_data_size, shader_blob, messages_blob);
491 FIXME(
"Ignoring secondary flags %#x.\n", secondary_flags);
496 *messages_blob =
NULL;
503 compile_info.
next = &preprocess_info;
505 compile_info.
source.size = data_size;
514 preprocess_info.
next = &hlsl_info;
519 for (macro =
macros; macro->Name; ++macro)
567#if D3D_COMPILER_VERSION <= 39
576 ERR(
"Failed to compile shader, vkd3d result %d.\n",
ret);
585 ERR(
"Shader log:\n");
632 memcpy(ID3D10Blob_GetBufferPointer(*shader_blob), byte_code.
code, byte_code.
size);
643 TRACE(
"data %p, data_size %Iu, filename %s, defines %p, include %p, entrypoint %s, "
644 "target %s, sflags %#x, eflags %#x, shader %p, error_messages %p.\n",
656 TRACE(
"data %p, size %Iu, filename %s, defines %p, include %p, shader %p, error_messages %p.\n",
679 TRACE(
"data %p, size %Iu, flags %#x, comments %p, disassembly %p.\n",
688#if D3D_COMPILER_VERSION >= 46
712 ERR(
"Failed to disassemble shader, vkd3d result %d.\n",
ret);
721 ERR(
"Shader log:\n");
736 memcpy(ID3D10Blob_GetBufferPointer(*disassembly), asm_code.
code, asm_code.
size);
747 DWORD source_size, read_size;
751 TRACE(
"filename %s, defines %p, include %p, entrypoint %s, target %s, flags1 %#x, flags2 %#x, "
774 WARN(
"Failed to read file contents.\n");
782 flags1, flags2,
code, errors);
792 FIXME(
"linker %p stub!\n", linker);
static unsigned char bytes[4]
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static WCHAR *(* get_line)(FILE *)
HRESULT shader_write_bytecode(const struct bwriter_shader *shader, uint32_t **result, uint32_t *size)
void SlDeleteShader(struct bwriter_shader *shader)
#define D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY
#define D3DCOMPILE_PACK_MATRIX_ROW_MAJOR
#define D3DCOMPILE_PACK_MATRIX_COLUMN_MAJOR
#define D3DCOMPILE_EFFECT_CHILD_EFFECT
#define D3D_COMPILE_STANDARD_FILE_INCLUDE
static SIZE_T const char const D3D_SHADER_MACRO ID3DInclude * include
static SIZE_T const char const D3D_SHADER_MACRO ID3DInclude UINT ID3DBlob ID3DBlob ** error_messages
static SIZE_T const char const D3D_SHADER_MACRO * defines
HRESULT WINAPI D3DPreprocess(const void *data, SIZE_T size, const char *filename, const D3D_SHADER_MACRO *defines, ID3DInclude *include, ID3DBlob **shader, ID3DBlob **error_messages)
static HRESULT WINAPI d3dcompiler_include_from_file_open(ID3DInclude *iface, D3D_INCLUDE_TYPE include_type, const char *filename, const void *parent_data, const void **data, UINT *bytes)
static CRITICAL_SECTION wpp_mutex
HRESULT WINAPI D3DCompile(const void *data, SIZE_T data_size, const char *filename, const D3D_SHADER_MACRO *defines, ID3DInclude *include, const char *entrypoint, const char *target, UINT sflags, UINT eflags, ID3DBlob **shader, ID3DBlob **error_messages)
static int open_include(const char *filename, bool local, const char *parent_data, void *context, struct vkd3d_shader_code *code)
static void close_include(const struct vkd3d_shader_code *code, void *context)
HRESULT WINAPI D3DDisassemble(const void *data, SIZE_T size, UINT flags, const char *comments, ID3DBlob **disassembly)
static CRITICAL_SECTION_DEBUG wpp_mutex_debug
static HRESULT hresult_from_vkd3d_result(int vkd3d_result)
static HRESULT preprocess_shader(const void *data, SIZE_T data_size, const char *filename, const D3D_SHADER_MACRO *defines, ID3DInclude *include, ID3DBlob **shader_blob, ID3DBlob **messages_blob)
#define D3DXERR_INVALIDDATA
static HRESULT WINAPI d3dcompiler_include_from_file_close(ID3DInclude *iface, const void *data)
HRESULT WINAPI D3DAssemble(const void *data, SIZE_T datasize, const char *filename, const D3D_SHADER_MACRO *defines, ID3DInclude *include, UINT flags, ID3DBlob **shader, ID3DBlob **error_messages)
HRESULT WINAPI D3DCompile2(const void *data, SIZE_T data_size, const char *filename, const D3D_SHADER_MACRO *macros, ID3DInclude *include, const char *entry_point, const char *profile, UINT flags, UINT effect_flags, UINT secondary_flags, const void *secondary_data, SIZE_T secondary_data_size, ID3DBlob **shader_blob, ID3DBlob **messages_blob)
HRESULT WINAPI D3DCompileFromFile(const WCHAR *filename, const D3D_SHADER_MACRO *defines, ID3DInclude *include, const char *entrypoint, const char *target, UINT flags1, UINT flags2, ID3DBlob **code, ID3DBlob **errors)
static enum vkd3d_shader_target_type get_target_for_profile(const char *profile)
HRESULT WINAPI D3DLoadModule(const void *data, SIZE_T size, ID3D11Module **module)
const struct ID3DIncludeVtbl d3dcompiler_include_from_file_vtbl
HRESULT WINAPI D3DCreateLinker(ID3D11Linker **linker)
static HRESULT assemble_shader(const char *preproc_shader, ID3DBlob **shader_blob, ID3DBlob **error_messages)
static struct d3dcompiler_include_from_file * impl_from_ID3DInclude(ID3DInclude *iface)
struct bwriter_shader * SlAssembleShader(const char *text, char **messages)
HRESULT WINAPI D3DCreateBlob(SIZE_T data_size, ID3DBlob **blob)
static uint32_t read_u32(const char **ptr)
#define ReadFile(a, b, c, d, e)
#define INVALID_HANDLE_VALUE
#define CreateFileA(a, b, c, d, e, f, g)
#define FILE_ATTRIBUTE_NORMAL
#define WideCharToMultiByte
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
DWORD WINAPI GetCurrentDirectoryA(IN DWORD nBufferLength, OUT LPSTR lpBuffer)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP size_t __cdecl strlen(const char *)
_ACRTIMP char *__cdecl strstr(const char *, const char *)
_ACRTIMP int __cdecl strcmp(const char *, const char *)
_ACRTIMP char *__cdecl strrchr(const char *, int)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLdouble GLdouble GLdouble GLdouble q
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define memcpy(s1, s2, n)
LIST_ENTRY ProcessLocksList
ID3DInclude ID3DInclude_iface
const char * initial_filename
const struct vkd3d_shader_compile_option * options
struct vkd3d_shader_code source
enum vkd3d_shader_log_level log_level
enum vkd3d_shader_structure_type type
unsigned int option_count
enum vkd3d_shader_source_type source_type
enum vkd3d_shader_target_type target_type
enum vkd3d_shader_structure_type type
struct vkd3d_shader_code secondary_code
enum vkd3d_shader_structure_type type
const struct vkd3d_shader_macro * macros
PFN_vkd3d_shader_open_include pfn_open_include
PFN_vkd3d_shader_close_include pfn_close_include
#define CONTAINING_RECORD(address, type, field)
@ VKD3D_SHADER_COMPILE_OPTION_BACKWARD_COMPATIBILITY
@ VKD3D_SHADER_COMPILE_OPTION_PACK_MATRIX_ORDER
@ VKD3D_SHADER_COMPILE_OPTION_CHILD_EFFECT
@ VKD3D_SHADER_COMPILE_OPTION_API_VERSION
@ VKD3D_SHADER_COMPILE_OPTION_STRIP_DEBUG
@ VKD3D_SHADER_COMPILE_OPTION_INCLUDE_EMPTY_BUFFERS_IN_EFFECTS
VKD3D_SHADER_API void vkd3d_shader_free_shader_code(struct vkd3d_shader_code *code)
@ VKD3D_SHADER_COMPILE_OPTION_BACKCOMPAT_MAP_SEMANTIC_NAMES
@ VKD3D_SHADER_SOURCE_D3D_BYTECODE
@ VKD3D_SHADER_SOURCE_HLSL
@ VKD3D_SHADER_SOURCE_DXBC_TPF
VKD3D_SHADER_API int vkd3d_shader_serialize_dxbc(size_t section_count, const struct vkd3d_shader_dxbc_section_desc *sections, struct vkd3d_shader_code *dxbc, char **messages)
@ VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO
@ VKD3D_SHADER_STRUCTURE_TYPE_PREPROCESS_INFO
@ VKD3D_SHADER_STRUCTURE_TYPE_HLSL_SOURCE_INFO
@ VKD3D_SHADER_API_VERSION_1_3
VKD3D_SHADER_API int vkd3d_shader_compile(const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, char **messages)
VKD3D_SHADER_API int vkd3d_shader_preprocess(const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, char **messages)
@ VKD3D_SHADER_TARGET_D3D_ASM
@ VKD3D_SHADER_TARGET_NONE
@ VKD3D_SHADER_TARGET_DXBC_TPF
@ VKD3D_SHADER_TARGET_D3D_BYTECODE
@ VKD3D_SHADER_COMPILE_OPTION_PACK_MATRIX_COLUMN_MAJOR
@ VKD3D_SHADER_COMPILE_OPTION_PACK_MATRIX_ROW_MAJOR
VKD3D_SHADER_API void vkd3d_shader_free_messages(char *messages)
@ VKD3D_ERROR_INVALID_ARGUMENT
@ VKD3D_ERROR_NOT_IMPLEMENTED
@ VKD3D_ERROR_INVALID_SHADER
@ VKD3D_ERROR_OUT_OF_MEMORY
DWORD WINAPI GetLastError(void)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
#define INVALID_FILE_SIZE
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
static HRESULT HRESULT_FROM_WIN32(unsigned int x)