Preprocessing asm shaders

Józef Kucia joseph.kucia at gmail.com
Mon Mar 12 16:13:45 CDT 2012


Hi,

I'm writing because I found a bug in asm shader preprocessor in Wine
and I'm not sure what's the best way to fix it.

The D3DPreprocess function is an universal shader preprocess for HLSL
and asm shaders. In fact, it's C-like language preprocessor and it
doesn't understand assembler style comments (comments from ';' to the
end of line). The fact that it doesn't understand these comments is a
root of whole problem. Valid asm shaders can contain single or double
quotation characters in assembler style comments, and these quotation
characters will be treated as a beginning of quoted string constants
while preprocessing.

The Wine's implementation of D3DPreprocess behaves differently than
Windows implementation in respect to strings passing the end of line.
Generally, strings passing the end of line are an error in C, but they
can result in a correct asm shader when contained in a assembler style
comment. D3DPreprocess on Windows works fine for shaders which
contains single or double quotation marks. It only issues an error in
case of unmatched double quotation mark, but returns D3D_OK anyway. In
Wine situation is different, wpp tries to find a matching quotation
mark to the end of file, while shader preprocessor on Windows gives up
on parsing a string when it gets a first newline character. The result
of wpp's behavior is a truncated output and an error returned from
D3DPreprocess.

I wonder if it's fine to change wpp behavior for strings passing the
end of line to mimic the behavior observed on Windows. Perhaps,
strings passing the end of line could be treated as an error by
default. Whereas D3DCompiler would activate an option to treat such
strings as a warning.

Thanks,
Józef Kucia



More information about the wine-devel mailing list