OSDN Git Service

glInstanceID implementation
authorAlexis Hetu <sugoi@google.com>
Fri, 5 Jun 2015 21:08:39 +0000 (17:08 -0400)
committerAlexis Hétu <sugoi@google.com>
Mon, 8 Jun 2015 15:05:25 +0000 (15:05 +0000)
Implementation attempt for glInstanceID.
Related dEQP tests pass.

Change-Id: I6391699a127cc7c159a2a64e3ffeaa528b611f97
Reviewed-on: https://swiftshader-review.googlesource.com/3412
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
src/Renderer/Renderer.cpp
src/Shader/VertexProgram.cpp
src/Shader/VertexRoutine.cpp
src/Shader/VertexRoutine.hpp
src/Shader/VertexShader.cpp

index be111ff..881c6d9 100644 (file)
@@ -424,6 +424,11 @@ namespace sw
                                        memcpy(&data->vs.b, VertexProcessor::b, sizeof(bool) * draw->vsDirtyConstB);
                                        draw->vsDirtyConstB = 0;
                                }
+
+                               if(context->vertexShader->instanceIdDeclared)
+                               {
+                                       data->instanceID = context->instanceID;
+                               }
                        }
                        else
                        {
index 14bd5f6..5a516c4 100644 (file)
@@ -665,6 +665,9 @@ namespace sw
                                reg = r.o[i + relativeAddress(r, src)];
                        }
                        break;
+               case Shader::PARAMETER_MISCTYPE:
+                       reg.x = Float(r.instanceID);
+                       return reg;
                default:
                        ASSERT(false);
                }
index 94bbdeb..61bca55 100644 (file)
@@ -52,6 +52,10 @@ namespace sw
                        Registers r(shader);
                        r.data = data;
                        r.constants = *Pointer<Pointer<Byte> >(data + OFFSET(DrawData,constants));
+                       if(shader->instanceIdDeclared)
+                       {
+                               r.instanceID = *Pointer<Int>(data + OFFSET(DrawData, instanceID));
+                       }
 
                        Do
                        {
index 17c04dd..e023992 100644 (file)
@@ -67,6 +67,8 @@ namespace sw
                        Int4 enableBreak;
                        Int4 enableContinue;
                        Int4 enableLeave;
+
+                       Int instanceID;
                };
 
        public:
index 3b888d7..7bb7f0a 100644 (file)
@@ -41,6 +41,7 @@ namespace sw
                        memcpy(input, vs->input, sizeof(input));
                        positionRegister = vs->positionRegister;
                        pointSizeRegister = vs->pointSizeRegister;
+                       instanceIdDeclared = vs->instanceIdDeclared;
                        usedSamplers = vs->usedSamplers;
 
                        optimize();