xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/d3d/ShaderExecutableD3D.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2012 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker 
7*8975f5c5SAndroid Build Coastguard Worker // ShaderExecutable.cpp: Implements a class to contain D3D shader executable
8*8975f5c5SAndroid Build Coastguard Worker // implementation details.
9*8975f5c5SAndroid Build Coastguard Worker 
10*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/d3d/ShaderExecutableD3D.h"
11*8975f5c5SAndroid Build Coastguard Worker 
12*8975f5c5SAndroid Build Coastguard Worker #include "common/angleutils.h"
13*8975f5c5SAndroid Build Coastguard Worker 
14*8975f5c5SAndroid Build Coastguard Worker namespace rx
15*8975f5c5SAndroid Build Coastguard Worker {
16*8975f5c5SAndroid Build Coastguard Worker 
ShaderExecutableD3D(const void * function,size_t length)17*8975f5c5SAndroid Build Coastguard Worker ShaderExecutableD3D::ShaderExecutableD3D(const void *function, size_t length)
18*8975f5c5SAndroid Build Coastguard Worker     : mFunctionBuffer(length)
19*8975f5c5SAndroid Build Coastguard Worker {
20*8975f5c5SAndroid Build Coastguard Worker     memcpy(mFunctionBuffer.data(), function, length);
21*8975f5c5SAndroid Build Coastguard Worker }
22*8975f5c5SAndroid Build Coastguard Worker 
~ShaderExecutableD3D()23*8975f5c5SAndroid Build Coastguard Worker ShaderExecutableD3D::~ShaderExecutableD3D() {}
24*8975f5c5SAndroid Build Coastguard Worker 
getFunction() const25*8975f5c5SAndroid Build Coastguard Worker const uint8_t *ShaderExecutableD3D::getFunction() const
26*8975f5c5SAndroid Build Coastguard Worker {
27*8975f5c5SAndroid Build Coastguard Worker     return mFunctionBuffer.data();
28*8975f5c5SAndroid Build Coastguard Worker }
29*8975f5c5SAndroid Build Coastguard Worker 
getLength() const30*8975f5c5SAndroid Build Coastguard Worker size_t ShaderExecutableD3D::getLength() const
31*8975f5c5SAndroid Build Coastguard Worker {
32*8975f5c5SAndroid Build Coastguard Worker     return mFunctionBuffer.size();
33*8975f5c5SAndroid Build Coastguard Worker }
34*8975f5c5SAndroid Build Coastguard Worker 
getDebugInfo() const35*8975f5c5SAndroid Build Coastguard Worker const std::string &ShaderExecutableD3D::getDebugInfo() const
36*8975f5c5SAndroid Build Coastguard Worker {
37*8975f5c5SAndroid Build Coastguard Worker     return mDebugInfo;
38*8975f5c5SAndroid Build Coastguard Worker }
39*8975f5c5SAndroid Build Coastguard Worker 
appendDebugInfo(const std::string & info)40*8975f5c5SAndroid Build Coastguard Worker void ShaderExecutableD3D::appendDebugInfo(const std::string &info)
41*8975f5c5SAndroid Build Coastguard Worker {
42*8975f5c5SAndroid Build Coastguard Worker     mDebugInfo += info;
43*8975f5c5SAndroid Build Coastguard Worker }
44*8975f5c5SAndroid Build Coastguard Worker 
UniformStorageD3D(size_t initialSize)45*8975f5c5SAndroid Build Coastguard Worker UniformStorageD3D::UniformStorageD3D(size_t initialSize) : mUniformData()
46*8975f5c5SAndroid Build Coastguard Worker {
47*8975f5c5SAndroid Build Coastguard Worker     bool result = mUniformData.resize(initialSize);
48*8975f5c5SAndroid Build Coastguard Worker     ASSERT(result);
49*8975f5c5SAndroid Build Coastguard Worker 
50*8975f5c5SAndroid Build Coastguard Worker     // Uniform data is zero-initialized by default.
51*8975f5c5SAndroid Build Coastguard Worker     mUniformData.fill(0);
52*8975f5c5SAndroid Build Coastguard Worker }
53*8975f5c5SAndroid Build Coastguard Worker 
~UniformStorageD3D()54*8975f5c5SAndroid Build Coastguard Worker UniformStorageD3D::~UniformStorageD3D() {}
55*8975f5c5SAndroid Build Coastguard Worker 
size() const56*8975f5c5SAndroid Build Coastguard Worker size_t UniformStorageD3D::size() const
57*8975f5c5SAndroid Build Coastguard Worker {
58*8975f5c5SAndroid Build Coastguard Worker     return mUniformData.size();
59*8975f5c5SAndroid Build Coastguard Worker }
60*8975f5c5SAndroid Build Coastguard Worker 
getDataPointer(unsigned int registerIndex,unsigned int registerElement)61*8975f5c5SAndroid Build Coastguard Worker uint8_t *UniformStorageD3D::getDataPointer(unsigned int registerIndex, unsigned int registerElement)
62*8975f5c5SAndroid Build Coastguard Worker {
63*8975f5c5SAndroid Build Coastguard Worker     size_t offset = ((registerIndex * 4 + registerElement) * sizeof(float));
64*8975f5c5SAndroid Build Coastguard Worker     return mUniformData.data() + offset;
65*8975f5c5SAndroid Build Coastguard Worker }
66*8975f5c5SAndroid Build Coastguard Worker 
67*8975f5c5SAndroid Build Coastguard Worker }  // namespace rx
68