[Webkit-unassigned] [Bug 187735] Adding WHLSL compiler
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Tue Jul 17 14:24:11 PDT 2018
https://bugs.webkit.org/show_bug.cgi?id=187735
Dean Jackson <dino at apple.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |dino at apple.com
Attachment #345174|review? |review+
Flags| |
--- Comment #5 from Dean Jackson <dino at apple.com> ---
Comment on attachment 345174
--> https://bugs.webkit.org/attachment.cgi?id=345174
Patch
View in context: https://bugs.webkit.org/attachment.cgi?id=345174&action=review
Can we have some tests that check input v expected output?
> Tools/WebGPUShadingLanguageRI/Metal/ArrayRefDefinition.ts:26
> +/// Writes the definitions of the structures used for the different array ref types present in the program
While this isn't C++ code, and also isn't JS code, we should probably still follow the coding guidelines. That would mean using // and ending the sentence with a full stop (period). The same goes for other comments in the patch.
> Tools/WebGPUShadingLanguageRI/Metal/Deinliner.ts:48
> + if (a == ReturnStyle.Always || a == ReturnStyle.SometimesEarly) {
> + return a;
> + } else {
> + return b;
> + }
Single line conditionals.
> Tools/WebGPUShadingLanguageRI/Metal/Deinliner.ts:138
> + if (result == ReturnStyle.Always) {
> + return ReturnStyle.SometimesEarly;
> + }
Single line conditionals don't use {} in WebKit.
> Tools/WebGPUShadingLanguageRI/Metal/Deinliner.ts:186
> + const returnStyle = returnStyleForNodeOrNull(node);
> + return returnStyle != ReturnStyle.SometimesEarly;
No need for temporary local variable.
> Tools/WebGPUShadingLanguageRI/Metal/FindTopLevelTypeAttributes.ts:69
> + case "vertex":
> + this.visitVertexShader(func);
> + case "fragment":
> + this.visitFragmentShader(func);
I assume TypeScript doesn't need break in cases?
> Tools/WebGPUShadingLanguageRI/Metal/FindTopLevelTypeAttributes.ts:78
> + for (let param of func.parameters) {
> + this.attributesForType(param.type).isVertexAttribute = true;
> + }
Single line statement.
> Tools/WebGPUShadingLanguageRI/Metal/FindTopLevelTypeAttributes.ts:85
> + for (let param of func.parameters) {
> + this.attributesForType(param.type).isVertexOutputOrFragmentInput = true;
> + }
Ditto.
> Tools/WebGPUShadingLanguageRI/Metal/LineNumbers.ts:29
> + const lineNos = [];
> + let lineNo = 1;
Use lineNumbers and lineNumber.
> Tools/WebGPUShadingLanguageRI/Metal/LineNumbers.ts:34
> + if (src[i] == '\n') {
> + lineNo++;
> + }
Single line.
> Tools/WebGPUShadingLanguageRI/Metal/MSLFunctionDeclaration.ts:60
> + for (let param of this._func.parameters) {
> + map.set(param.name, `P${counter++}`);
> + }
Single line.
> Tools/WebGPUShadingLanguageRI/Metal/MSLFunctionDeclaration.ts:69
> + for (let [paramName, param] of this.paramMap) {
> + params.push(paramName);
> + }
Single line.
> Tools/WebGPUShadingLanguageRI/Metal/MSLFunctionDeclaration.ts:85
> + if (this._func.shaderType === "vertex" || this._func.shaderType === "fragment") {
> + declLine += `${this._func.shaderType} `;
> + }
Should you return if it isn't one of these types?
> Tools/WebGPUShadingLanguageRI/Metal/MSLLexer.ts:87
> + for (let innerTok of this._lex(commentText, this.commentMatchers)) {
> + tokens.push(innerTok);
> + }
SIngle line.
> Tools/WebGPUShadingLanguageRI/Metal/MSLLexer.ts:105
> + } else {
> + tokens.push(new Token(matcher.type, match[0]));
> + }
Ditto.
> Tools/WebGPUShadingLanguageRI/Metal/MSLStatementEmitter.ts:74
> + if (this.ancestorReturnType.name === "void") {
> + this._add(`return;`);
> + } else {
> + const resultVar = this._fresh();
> + this._add(`${this._typeNamer.mslTypeName(this.ancestorReturnType)} ${resultVar};`);
> + this._zeroInitialize(this.ancestorReturnType, resultVar);
> + this._add(`return ${resultVar};`);
> + }
For things like this we normally do early returns. e.g.
if (this.ancestorReturnType.name === "void") {
this._add(`return;`);
return;
}
const resultVar....
Also, you don't need a `` string for the "return". I'm not sure there is really a performance win though.
> Tools/WebGPUShadingLanguageRI/Metal/MSLStatementEmitter.ts:91
> + if (node.name == "bool") {
> + emitter._add(`${variableName} = false;`);
> + } else {
> + emitter._add(`${variableName} = 0;`);
> + }
> + }
Single line conditionals.
> Tools/WebGPUShadingLanguageRI/Metal/MSLStatementEmitter.ts:102
> + for (let i = 0; i < node.numElements.value; i++) {
> + emitter._zeroInitialize(node.elementType, `${variableName}[${i}]`, false);
> + }
Single line.
> Tools/WebGPUShadingLanguageRI/Metal/MSLStatementEmitter.ts:244
> + } else {
> + this._add('}');
> + }
Single line.
> Tools/WebGPUShadingLanguageRI/Metal/MSLStatementEmitter.ts:263
> + } else {
> + throw new Error(`Couldn't determine type of ! expression ${node}'`);
> + }
Single line.
> Tools/WebGPUShadingLanguageRI/Metal/MSLStatementEmitter.ts:277
> + if (this._canAvoidDereferenceBecauseDereferencingReferenceNode(node.ptr)) {
> + return this._doNotProduceReferenceFromReferenceNode(node.ptr);
> + } else {
Single line.
> Tools/WebGPUShadingLanguageRI/Metal/MSLStatementEmitter.ts:370
> + if (anderRegex.test(node.nativeFuncInstance.name)) {
> + return emitter._handleFieldAccess(node);
> + } else if (node.nativeFuncInstance.name === "operator&[]") {
> + return emitter._handleIndexAccess(node);
> + }
Again.
> Tools/WebGPUShadingLanguageRI/Metal/MSLStatementEmitter.ts:425
> + } else {
> + return this._nameMap.get(node.name);
> + }
Again.
> Tools/WebGPUShadingLanguageRI/Metal/MSLStatementEmitter.ts:441
> + for (let expr of node.list) {
> + result = Node.visit(expr, this);
> + }
Again. I'll stop pointing them out now.
--
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20180717/c49d2b25/attachment.html>
More information about the webkit-unassigned
mailing list